将散列字节数组转换为String

时间:2013-04-26 21:39:02

标签: java string hash bytearray

如果我做的话

int keyLength = 160; // because SHA1 generates 160-bit hashes
int iterations = 20 * 1000; //standard is 2000 but let's be more secure here

KeySpec spec = new PBEKeySpec(password.toCharArray(), generateSalt(), iterations, keyLength);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
byte[] hash = keyFactory.generateSecret(spec).getEncoded();

如何将此哈希值转换为字符串,以便将其保存到数据库中?我尝试new String(hash, "UTF-8");但这会产生格式错误的字符,如l��0\�w�c��Q�

2 个答案:

答案 0 :(得分:5)

您需要将字节数组编码为Base64 string,然后在从数据库中读取时将其解码回字节数组。请注意,编码的字符串将比原始字节数组大约33%。

答案 1 :(得分:1)

如果你总是在你的应用程序中将你的密钥用作byte[],那么将它作为BLOB二进制对象本身保存在数据库中会好得多。您可以避免转换错误。