为什么我无法使用keytool和RSA生成密钥?

时间:2017-07-27 01:57:32

标签: java algorithm cordova ionic-framework rsa

所以这就是我试过的

keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000

但我得到了这个......

keytool error: java.security.NoSuchAlgorithmException: RSA KeyGenerator not available
java.security.NoSuchAlgorithmException: RSA KeyGenerator not available

我该怎么办?

p.s using:jdk1.8.0_121

2 个答案:

答案 0 :(得分:3)

执行命令keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000时没有错误,这是输出的一个例子。

Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,000 days    for: CN=a, OU=a, O=a, L=a, ST=a, C=a
Enter key password for <mykey>
    (RETURN if same as keystore password):  
[Storing my-release-key.jks]

但是导致java.security.NoSuchAlgorithmException: RSA KeyGenerator not available的原因是什么?

此错误表示keytool尝试通过RSA无效算法实例化KeyGenerator对象。为什么RSA是KeyGenerator的无效算法?这是因为RSA是非对称密钥的算法,KeyGenerator是一个创建对称密钥的类。

现在让我们做一些测试来澄清想法并使用RSA创建一个KeyGenerator对象:

public class KeyGeneratorTest {
    public static void main(String[] args) {
        try {
            KeyGenerator keyGeneratorTest=KeyGenerator.getInstance("RSA");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
}

之前的代码生成了问题中报告的相同异常:

java.security.NoSuchAlgorithmException: RSA KeyGenerator not available
    at javax.crypto.KeyGenerator.<init>(KeyGenerator.java:169)
    at javax.crypto.KeyGenerator.getInstance(KeyGenerator.java:223)

现在我将尝试使用keytool和RSA算法参数创建对称密钥。

keytool -genseckey -alias mytest2 -keyalg RSA -keysize 192 -storetype JCEKS

输出与问题报告完全相同。

keytool error: java.security.NoSuchAlgorithmException: RSA KeyGenerator not available

抛出错误是因为内部keytool -genseckey命令尝试使用RSA算法参数(-keyalg RSA)创建KeyGenerator对象,因为我提到RSA不是用于创建对称密钥的有效算法。

请访问以下文档以了解有关keytool的更多信息。 List of Java Standard Algorithm NamesNoSuchAlgorithmException DocumentationKeytool source codeKeytool reference documentation

答案 1 :(得分:0)

也许您想使用

keytool -genseckey -keystore my-release.pf12 -deststoretype pkcs12 -keyalg AES -keysize 256 -storepass <passwd> -keypass <passwd> -noprompt