密钥的密钥材料需要十六进制编码吗?(Java)



当我想将密钥保存到文件时,我在下面找到了snap代码。

为什么在保存密钥之前要用十六进制格式对其进行编码?

下面这两个快捷代码有什么区别?

捕捉代码1

public static void saveKey(SecretKey key, File file) throws IOException {
    byte[] encoded = key.getEncoded();
    char[] hex = Hex.encodeHex(encoded);
    String data = String.valueOf(hex);
    FileUtils.writeStringToFile(file, data);
}

捕捉代码2

public static void saveKey(SecretKey key, File file) throws IOException {
    byte[] encoded = key.getEncoded();
    FileUtils.writeStringToFile(file, new String(encoded));
}

Snap code 1将任何密钥正确地作为十六进制编码字符串写入文件。它总是可逆的。

快照代码2一点都不好。它依赖于支持key的字节是平台默认字符集中的有效字节序列。如果不是,则行为是未定义的。即,返回的字符串可能不可逆地返回到原始字节序列。

最新更新