我使用这里的解决方案:
public static byte[] getEncryptedPassword(String password, byte[] salt, int iterations, int derivedKeyLength) throws NoSuchAlgorithmException, InvalidKeySpecException {
KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, iterations, derivedKeyLength * 8);
SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
return f.generateSecret(spec).getEncoded();
}
问题是,当我这样做时:
System.out.println(new String(getEncryptedPassword(p,s,i,l)));
我得到一个非常奇怪的字符串,例如���:
,但我想要一个可以保存在数据库中的普通字符串。我的错误是什么?
如果要将二进制数据(如 a )byte[]
转换为字符串,通常将其编码为十六进制或 Base64 格式。Base64 比十六进制小,因此我建议您使用这个。
对于 Base64,您可以java.util.Base64
从 Java 8 开始使用:
String base64encoded = Base64.getEncoder().encodeToString(getEncryptedPassword(p,s,i,l)));
对于Hex
AFAIR Java 不包含必要的代码。您可以使用例如来自Apache 通用编解码器的十六进制编码:
String hexEncoded = Hex.encodeHexString(getEncryptedPassword(p,s,i,l)));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句