有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java KeyPairGenerator未生成随机密钥

我正在用KeyPairGenerator生成RSA密钥对,我注意到它一直在生成完全匹配的密钥,而不是随机生成的密钥?也许有人有ide为什么会这样

我的代码现在看起来像这样:

private static KeyPair generateKeyPair(Provider provider, int keySize) throws Exception
{

    KeyPair keyPair = null;

    /* get the eracom keystore - access to the adapter */
    //KeyStore keyStore = KeyStore.getInstance("CRYPTOKI", provider.getName());
    KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", provider.getName());

    keyPairGenerator.initialize(keySize);
    keyPair = keyPairGenerator.generateKeyPair();

    return keyPair;
}

问题解决了: 这是HSM和我使用的提供商的问题。看看关于约阿希姆·绍尔回复的评论


共 (3) 个答案

  1. # 1 楼答案

    运行稍微修改过的代码版本(以便编译)效果很好(即,在多次运行时生成不同的键:

    KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
    
    keyPairGenerator.initialize(1024);
    keyPair = keyPairGenerator.generateKeyPair();
    System.out.println(keyPair.getPrivate());
    System.out.println(keyPair.getPublic());
    

    您使用的提供商是否可能是。。。行为不端?provider.getName()的值是多少

  2. # 2 楼答案

    我也面临同样的问题。对我有效的代码是:

    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");    
    SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
    keyGen.initialize(1024,random);
    KeyPair key = keyGen.generateKeyPair();
    

    现在打印出来,用以下方法检查钥匙是否不同:

    System.out.println(key.getPrivate());
    System.out.println(key.getPublic());
    

    SecureRandom生成器在本例中使用给定的算法(SHA1PRNG)和privider(在本例中使用SUN)创建一个新的随机数。你可以在这里找到更多信息:https://docs.oracle.com/javase/tutorial/security/apisign/step2.html 这里是api: http://docs.oracle.com/javase/8/docs/api/java/security/SecureRandom.html

  3. # 3 楼答案

    你初始化了吗。根据here的说法,它应该看起来像:

    KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
    generator.initialize(1024);
    KeyPair keyPair = generator.generateKeyPair();