Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为密钥对生成生成确定性SecureRandom?_Java_Android_Cryptography - Fatal编程技术网

Java 如何为密钥对生成生成确定性SecureRandom?

Java 如何为密钥对生成生成确定性SecureRandom?,java,android,cryptography,Java,Android,Cryptography,我需要根据用户输入的密码生成密钥对 我想用Java(Android)实现它,如下所示: 用户输入密码 密钥派生函数(例如PBKDF2)用于生成种子 种子用于伪随机数发生器(PRNG),该发生器基于种子生成确定性值 KeyPairGenerator使用伪随机数生成器生成非对称密钥对 也看到 我的问题在第3步和第4步。使用随机性源来初始化a。可以选择SecureRandom,但这不会使SecureRandom成为可预测的预期行为 我找到了不同的建议来解决这个问题: 使用“SHA1PRNG”作为Sec

我需要根据用户输入的密码生成密钥对

我想用Java(Android)实现它,如下所示:

  • 用户输入密码
  • 密钥派生函数(例如PBKDF2)用于生成种子
  • 种子用于伪随机数发生器(PRNG),该发生器基于种子生成确定性值
  • KeyPairGenerator使用伪随机数生成器生成非对称密钥对
  • 也看到

    我的问题在第3步和第4步。使用随机性源来初始化a。可以选择SecureRandom,但这不会使SecureRandom成为可预测的预期行为

    我找到了不同的建议来解决这个问题:

  • 使用“SHA1PRNG”作为SecureRandom的算法
    • 在旧的android设备上,SHA1PRNG的实现被破坏,只使用setSeed中的种子
    • ->不同平台上的实现不同,因此无法使用
  • 包装器围绕扩展SecureRandom的不同PRNG
  • 扩展SecureRandom
  • 覆盖所有方法并将它们指向不同的PRNG。
    • 是否已经有我可以使用的PRNG实现
    • 我查看了
      org.spongycastle.crypto.prng
      包。例如,是否可以使用SP800SecureRandomBuilder构建确定性SecureRandom

  • 一般来说,在Android上实现确定性SecureRandom生成密钥对的最佳方法是什么?

    javax.crypto
    java.security
    旁边提供了许多附加功能。也许可以看看其中的一些类。这个问题不断出现。我不得不说,这几乎总是错误设计决策的结果。生成一个真正的随机密钥对并使用基于密码的加密对私钥进行加密比从密码种子确定生成密钥对要好。不过,Bouncycastle中有一个名为的示例,您可以使用它作为扩展SecureRandom以消除熵的示例。您需要重写的唯一方法是
    setSeed()
    nextBytes()