java - 使用随机安全生成 key 对

标签 java private-key key-pair secure-random

无论如何我可以生成始终相同的私钥吗?我厌倦了初始化 KeyPairGeneratorRandomSecure使用相同 seed 的对象:

private PrivateKey getPrivateKey(String seed) {
    try {   
        SecureRandom sr = new SecureRandom(seed.getBytes());

        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
        keyGen.initialize(1024, sr);
        KeyPair keyPair = keyGen.generateKeyPair();
        return keyPair.getPrivate();
    } catch (NoSuchAlgorithmException e) {
        System.out.println("Failed to generate key pair!");
    }
    return null;
}

我调用上面的函数并检查私钥是否相同:

String seed = "xyzabc123";
PrivateKey key1 = getPrivateKey(seed);
PrivateKey key2 = getPrivateKey(seed);

boolean same = key1.equals(key2); // false

它们是不同的,我的问题是有没有办法生成始终相同的私钥?

最佳答案

我认为这段代码不会在每次请求时生成相同的private-key。 这背后的原因是这段特殊的代码

SecureRandom sr = new SecureRandom(seed.getBytes());

每次调用 getPrivateKey(String) 方法时。每一次 SecureRandom 类都会生成一个新的随机数。

keyGen.initialize(1024, sr); //each time secure random number will be different.
KeyPair keyPair = keyGen.generateKeyPair();

keyGen.initialize()方法总是用不同的key初始化,所以每次keyGen.generateKeyPair();方法都会生成不同的private -key.

如果您尝试在 initialize() 方法中更改或传递相同的 SecureRandom 对象,则只有可能实现。

关于java - 使用随机安全生成 key 对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36791447/

相关文章:

ssh - 如果私钥丢失,如何访问服务器

ios - 我应该如何与契约(Contract)开发人员一起管理 iOS 证书和 key ?

amazon-web-services - 如何为多个用户管理 EC2 key 对?

Java:如何考虑对马尔可夫链建模?

java - 使用 LinkedBlockingQueue 并刷新到 mysql

java - 未找到 HikariCP LoggerFactory 类定义

java - JSP:如何包含带有获取参数的页面?

c++ - Certmgr-没有私钥的自签名证书不会更新

android - 智能手机应用程序中的证书