我有一个需要加盐密码的应用程序。为了生成盐,我决定使用SecureRandom
. 当我在我的 Windows 机器上时,一切都很好。然后我尝试在基于 Linux 的机器(Centos 5)上运行我的代码,一切都崩溃了。
我隔离了问题并创建了这个测试用例:
public static void main(String[] args) {
SecureRandom sr = new SecureRandom();
byte[] saltBytes = new byte[256];
sr.nextBytes(saltBytes);
String salt = new String(saltBytes);
System.out.println(salt.length());
}
在 Windows 中,输出始终是 256,但在我的 Linux 机器上,输出会发生变化,并且永远不会是 256。它似乎总是生成长度小于 256 的盐。
有谁知道为什么会这样?
解决方案:
我刚刚将新的字符串行更改为new String(saltbytes, "ASCII");