-1

嗨,我有以下代码片段:

SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" , "SUN");
secureRandom.setSeed("seed");
keyGen.init(DEFAULT_KEY_LENGTH, secureRandom);
SecretKey secretKey = keyGen.generateKey();
byte[] encodedKey = secretKey.getEncoded();

“编码密钥”每次在平台窗口、AIX、Linux 上都给我相同的结果。HP-Unix,但它在 solaris 中给出不同的结果,似乎 setSeed() 不适用于 Solaris 或被绕过,

请帮助我,自从过去两天以来,我一直在努力解决这个问题。

谢谢希瓦姆

4

2 回答 2

0

如果你这样声明你的keyGen keyGen = KeyGenerator.getInstance("DES","SunJCE"); 您可以在 solaris 上获得相同的密钥。所有其他平台都使用 SunJCE 作为默认提供程序,但 solaris 使用 SunPKCS11-Solaris 作为默认提供程序。

于 2014-02-10T05:42:40.817 回答
0

Javadoc 上SecureRandom.setSeed(long)说:

给定的种子是对现有种子的补充,而不是替代。

SecureRandom工作方式不同java.util.Random- 该Random算法在所有实现中都是标准化的,而对SecureRandom算法不做任何保证。

另请注意

[...] 任何传递给 SecureRandom 对象的种子材料都必须是不可预测的。

这不是这里的情况。如果您的种子材料不是不可预测的,那么生成的随机数可能也不会是,因此没有使用加密安全的随机数生成器。

于 2013-10-09T15:51:00.697 回答