我试图每次都获得相同的盐值,具体取决于种子值。这是我的代码

SecureRandom sr = new SecureRandom(seed.getBytes());
byte[] salt = new byte[32];
sr.nextBytes(salt);


但是,每次运行我都会得到不同的值。我做错什么了吗?

更新:

好的,我尝试使用random而不是secureRandom并使用长种子获取字节,但是每次我仍然获得不同的值。但是,当我更改它以尝试获取nextInt时,我能够获得相同的值。

Random rand = new Random(Long.parseLong(seed, 36));
byte[] salt = new byte[32];
rand.nextBytes(salt);


是否有办法正确获取相同的字节?

最佳答案

这是故意的。 SecureRandom尝试使用熵来获得真正的随机性,这可能会很昂贵。无论开始使用哪种盐,它都会始终返回不同的值。

如果需要确定性值,请改用Random。

关于java - 使用Java的securerandom获取确定性值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25182805/

10-12 00:36