我有一個應用程序,我需要salt密碼。爲了生成鹽,我決定使用SecureRandom
。當我在我的Windows機器上時,一切都很好。然後我嘗試在基於Linux的機器上運行我的代碼(Centos 5),一切都破裂了。SecureRandom生成不同長度的值
我孤立的問題,並創造了這個測試案例:
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");
你沒有設置字符串的字符集,使用'字符串(字節[]字節,字符集字符集)'構造函數。 –
您不應該試圖將二進制數據放入文本字符串中。這通常會導致混淆。 –