如何将DES密钥转换为String

时间:2017-06-12 20:20:13

标签: java encoding cryptography des

使用以下代码生成des键:

String password = "abcd1234";
DESKeySpec key = new DESKeySpec(password.getBytes());
//SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
System.out.println(key);

我想将此密钥转换为字符串,然后返回密钥。

有没有办法在Java中这样做。

1 个答案:

答案 0 :(得分:0)

你所拥有的不是关键:

String password = "abcd1234";
byte[] bytes = password.getBytes();
DESKeySpec key = new DESKeySpec(bytes);
System.out.println(new String(key.getKey()));

只需生成KeySpec。现在,派生类SecretKeySpec派生自SecretKey,但DESKeySpec不是。关键规范仅仅是密钥的输入材料。

正如您所见,很容易将其再次转换为String

现在让我们真正生成一个密钥:

String password = "abcd1234";
byte[] bytes = password.getBytes();
DESKeySpec keySpec = new DESKeySpec(bytes);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key = keyFactory.generateSecret(keySpec);
System.out.println(new String(key.getEncoded()));

这将打印abcd1234而不是abbd1224。这是因为密钥工厂正确地将奇偶校验位设置在每个字节的低部分。由于每个字节表示使用大多数默认字符集的字符,因此字符串将有所不同。由于擦除了最低位值,因此无法恢复原始字符串(无需猜测)。

注意:

  • 不应使用DES;
  • 字符串不应包含关键信息;
  • 通常不使用(默认)平台字符集。