パスワードをソルトする必要があるアプリケーションがあります。塩を生成するために、使用することにしました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");