如何用种子生成密钥?

时间:2015-05-12 07:54:58

标签: java random key

我需要使用种子(字节数组)为我的算法生成。此代码无效,因为它在不同平台上提供了2种不同的结果:

byte seed [] = {50,30,...};
byte result [] = new byte [20];
SecureRandom rand = new SecureRandom();
rand.setSeed(seed);
rand.nextBytes(result);

我需要在不同的平台上获得相同的结果。

2 个答案:

答案 0 :(得分:0)

使用SHA1PRNG算法而不是NativePRNG。

SecureRandom rand = SecureRandom.getInstance("SHA1PRNG");
rand.setSeed(seed);
rand.nextBytes(result);

答案 1 :(得分:0)

  

始终指定您要使用的确切PRNG和提供商。如果您只使用默认的PRNG,您可能会在应用程序的不同安装上使用不同的PRNG,这些PRNG可能需要以不同方式调用才能正常工作。使用以下代码获取PRNG实例是合适的:

SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "SUN");

请参阅https://www.cigital.com/justice-league-blog/2009/08/14/proper-use-of-javas-securerandom/

另见:Android 4.2 broke my encrypt/decrypt code and the provided solutions don't work

这表明这可能适用于android:

SecureRandom secrand = SecureRandom.getInstance("SHA1PRNG", "Crypto");