java - 为什么我无法使用 keytool 和 RSA 生成 key ?

标签 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 使用:jdk1.8.0_121

最佳答案

当执行命令 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 不可用

此错误意味着 keytool 试图通过 RSA 无效算法实例化 KeyGenerator 对象。为什么 RSA 是 KeyGenerator 的无效算法?这是因为 RSA 是一种非对称 key 算法,而 KeyGenerator 是创建对称 key 的类。

现在让我们做一些测试来阐明想法并使用 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)

现在我将尝试使用 key 工具和 RSA 算法参数创建对称 key 。

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 不是用于创建对称 key 的有效算法。

请访问以下文档以了解有关 keytool 的更多信息。 List of Java Standard Algorithm Names , NoSuchAlgorithmException Documentation , Keytool source codeKeytool reference documentation

关于java - 为什么我无法使用 keytool 和 RSA 生成 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45340079/

相关文章:

algorithm - 'exec' 和 'select' 之间的区别;质因数分解算法

GIT,工作目录是如何填充的

JavaScript 滚动到带动画的 div

java - 比较数组元素

java - 对字符串进行拆分操作后出现 ArrayIndexOutOfBoundsException 错误

algorithm - 关于 8 拼图的 Hamming 和 Manhattan 优先级计算

android - PhoneGap 和 JQM 链接页面

javascript - 获取我的屏幕的宽高并修改它以适应任何设备

java - 当 CSV 文件在谷歌存储桶中并且 mysql 5.7.17 安装在云中的 RHEL 机器上时,如何使用 mysql 的加载数据 infile?

java - 在 Windows 10 中设置环境变量以使用 java 和 javac