您好我有以下代码片段:
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
答案 0 :(得分:0)
SecureRandom.setSeed(long)
上的Javadoc说:
给定的种子补充,而不是替换现有的种子。
SecureRandom
与java.util.Random
的工作方式不同 - Random
算法在所有实现中都是标准化的,而不保证SecureRandom
算法。
另请注意
[...]传递给SecureRandom对象的任何种子材料必须是不可预测的。
这不是这种情况。如果您的种子材料不可预测,则产生的随机数可能也不会,因此对于加密安全的随机数生成器没有用处。
答案 1 :(得分:0)
如果你以这种方式声明你的keyGen keyGen = KeyGenerator.getInstance(“DES”,“SunJCE”); 你可以在solaris上获得相同的密钥。 所有其他平台都使用SunJCE作为默认提供程序,但solaris使用SunPKCS11-Solaris作为默认提供程序。