Java 将哈希字节数组转换为字符串

Java 将哈希字节数组转换为字符串,java,string,hash,bytearray,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); Secre

如果我做了类似的事情

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();

如何将这个散列转换成字符串,以便保存到DB中?我尝试了
新字符串(散列,“UTF-8”)但这会产生格式错误的字符,如
l��0\�W�C��Q�

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

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

如果在应用程序中总是将密钥作为
字节[]
使用,则最好将其本身保存为数据库中的BLOB二进制对象。您可以避免转换错误。

如果您总是在应用程序中将密钥作为
字节[]
使用,则最好将其本身保存为数据库中的BLOB二进制对象。您将避免出现转换错误