在Solaris中,绕过SecureRandom.setSeed(“abc”)

时间:2013-10-09 14:45:56

标签: security random cryptography

您好我有以下代码片段:

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或它被绕过,

请帮助我,自从过去两天以来我一直在打破这个问题。

由于 Shivam

2 个答案:

答案 0 :(得分:0)

SecureRandom.setSeed(long)上的Javadoc说:

  

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

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

另请注意

  

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

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

答案 1 :(得分:0)

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