Java 如何为密钥对生成生成确定性SecureRandom?
我需要根据用户输入的密码生成密钥对 我想用Java(Android)实现它,如下所示:Java 如何为密钥对生成生成确定性SecureRandom?,java,android,cryptography,Java,Android,Cryptography,我需要根据用户输入的密码生成密钥对 我想用Java(Android)实现它,如下所示: 用户输入密码 密钥派生函数(例如PBKDF2)用于生成种子 种子用于伪随机数发生器(PRNG),该发生器基于种子生成确定性值 KeyPairGenerator使用伪随机数生成器生成非对称密钥对 也看到 我的问题在第3步和第4步。使用随机性源来初始化a。可以选择SecureRandom,但这不会使SecureRandom成为可预测的预期行为 我找到了不同的建议来解决这个问题: 使用“SHA1PRNG”作为Sec
- 在旧的android设备上,SHA1PRNG的实现被破坏,只使用setSeed中的种子李>
- ->不同平台上的实现不同,因此无法使用
- 是否已经有我可以使用的PRNG实现
- 我查看了
包。例如,是否可以使用SP800SecureRandomBuilder构建确定性SecureRandomorg.spongycastle.crypto.prng
一般来说,在Android上实现确定性SecureRandom生成密钥对的最佳方法是什么?
javax.crypto
在java.security
旁边提供了许多附加功能。也许可以看看其中的一些类。这个问题不断出现。我不得不说,这几乎总是错误设计决策的结果。生成一个真正的随机密钥对并使用基于密码的加密对私钥进行加密比从密码种子确定生成密钥对要好。不过,Bouncycastle中有一个名为的示例,您可以使用它作为扩展SecureRandom以消除熵的示例。您需要重写的唯一方法是setSeed()
和nextBytes()
。