使用java'获取确定性值;安全随机

使用java'获取确定性值;安全随机,java,hash,salt,Java,Hash,Salt,我每次都试图根据种子值获得相同的盐值。这是我的密码 SecureRandom sr = new SecureRandom(seed.getBytes()); byte[] salt = new byte[32]; sr.nextBytes(salt); 但是,每次运行它时,我都会得到不同的值。我做错什么了吗?有什么遗漏吗 更新: 好的,我尝试了使用random而不是secureRandom,并使用longseed获取字节,但每次都会得到不同的值。但是,当我更改它以尝试获取nextInt时,我能

我每次都试图根据种子值获得相同的盐值。这是我的密码

SecureRandom sr = new SecureRandom(seed.getBytes());
byte[] salt = new byte[32];
sr.nextBytes(salt);
但是,每次运行它时,我都会得到不同的值。我做错什么了吗?有什么遗漏吗

更新:

好的,我尝试了使用random而不是secureRandom,并使用longseed获取字节,但每次都会得到不同的值。但是,当我更改它以尝试获取nextInt时,我能够获得相同的值

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

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

这是有意的。SecureRandom尝试使用entrophy来获得真正的随机性,顺便说一句,这可能会很昂贵。无论你开始用什么盐,它都会返回不同的值


如果您想要确定性值,请改用随机。

您似乎缺少“SecureRandom”中的“Secure”。@BrettOkken我知道SecureRandom提供了更好的安全性,但对于我的应用程序,每次为哈希函数的给定输入生成相同的哈希结果很重要。这就是为什么我想得到同样的盐谢谢。我只是尝试使用随机函数,但每次运行它时都会得到不同的值。下面是我的代码:Random Random=newrandom(Long.parseLong(seed,36));字节[]salt=新字节[32];随机。下一个字节(盐);我有什么遗漏吗?也许你的种子有问题?将parseLong代码替换为硬编码常量,然后运行程序。每次都应该得到相同的值。如果这是可行的,你可以调查为什么种子会变化。我根据您的代码和新的Random(1000L)编写了一个短程序,它始终生成相同的字节!谢谢我用新的Random(1000L)替换了parseLong代码,正如您所做的那样,但由于某些原因,我仍然得到不同的值。它看起来就像这样:随机随机=新随机(1000L);字节[]salt=新字节[32];随机。下一个字节(盐);您确定运行的是新代码而不是旧版本吗?如果是,您使用的是什么平台?您可以尝试使用不同的JDK。听起来像是一个不太可能出现的bug,但是当我在循环中运行您最新注释中的代码时,它每次都会生成相同的字节。我使用eclipse,当我在循环中运行它时,我也会在该循环中得到相同的结果。但是,当我再次运行代码时,我在循环中得到相同的值,但与上一次运行不同。