SecureRandom生成不同长度的值

时间:2013-08-01 20:46:32

标签: java salt

我有一个应用程序,我需要盐密码。为了生成盐,我决定使用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的盐。

有谁知道为什么会这样?

解决方案:

我刚刚将新的String行更改为new String(saltbytes, "ASCII");

1 个答案:

答案 0 :(得分:5)

问题是字符编码。在linux上通常是utf-8,这是一个可变长度编码。如果你想要一个字符串,请使用base64代替它。

相关问题