【问题标题】:Why I can not generate key with keytool and RSA?为什么我不能用 keytool 和 RSA 生成密钥?
【发布时间】:2017-07-27 01:57:32
【问题描述】:

这就是我尝试的方法

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

我该怎么办?

ps 使用:jdk1.8.0_121

【问题讨论】:

  • 为我工作。 java version "1.8.0_40"

标签: java algorithm cordova ionic-framework rsa


【解决方案1】:

当命令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

【讨论】:

  • 试试看,为什么?这里给出的解决方案是什么?
  • 定义别名参数始终是避免与密钥库创建相关的错误的好习惯,错误将取决于环境,但在这种情况下,答案是建议使用良好做法创建密钥库。
  • @DanielC.,如果您将此评论添加到您的答案中,那就太好了。
  • -alias 选项不是必需的,也不是错误消息的来源。
  • 重新编辑,您应该删除“试试这个”部分,并将您的最终结论 #2 放在可以看到的顶部,并以更简单的形式。
【解决方案2】:

也许你想用

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多