我需要使用种子(字节数组)为我的算法生成键。此代码无效,因为它在不同平台上提供了2种不同的结果:
byte seed [] = {50,30,...};
byte result [] = new byte [20];
SecureRandom rand = new SecureRandom();
rand.setSeed(seed);
rand.nextBytes(result);
我需要在不同的平台上获得相同的结果。
答案 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");