当前位置: 首页 > 知识库问答 >
问题:

JAVA安全JAR中的spec.InvalidKeySpecException错误不在IDE中

孙洋
2023-03-14

我写了一个RSA加密代码,在IDE上运行良好,但在制作JAR文件后,它给出了错误-java.security.spec.InvalidKeySpecExctive

private static PublicKey readPubKey()throws Exception{
    //reading public key from the path specified in the configuration file
    Config conf = new Config();
    InputStream keyfis = conf.getFileInputStream(publicKeyPath);
    byte[] encKey = new byte[keyfis.available()];
    keyfis.read(encKey);
    keyfis.close();

    // making the instance of Public key from the bytes of the Public Key
    X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(encKey);
    java.security.KeyFactory keyFactory = KeyFactory.getInstance("RSA");

    //---------------problem in this line of code-----------
    PublicKey publicKey = keyFactory.generatePublic(pubKeySpec);
    return publicKey;
}

问题是一致的-

PublicKey publicKey = keyFactory.generatePublic(pubKeySpec);

异常的完整堆栈跟踪是-

Exception Caught : java.security.spec.InvalidKeySpecException: 
java.security.InvalidKeyException: exponent is smaller than 3
java.security.spec.InvalidKeySpecException: 
java.security.InvalidKeyException: exponent is smaller than 3
at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(RSAKeyFactory.java:205)
at java.security.KeyFactory.generatePublic(KeyFactory.java:334)
at com.token.TokenVerifier.readPubKey(TokenVerifier.java:55)
at com.token.TokenVerifier.verify(TokenVerifier.java:77)
at com.test.Main.main(Main.java:28)
Caused by: java.security.InvalidKeyException: exponent is smaller than 3
at sun.security.rsa.RSAPublicKeyImpl.checkExponentRange(RSAPublicKeyImpl.java:99)
at sun.security.rsa.RSAPublicKeyImpl.<init>(RSAPublicKeyImpl.java:88)
at sun.security.rsa.RSAKeyFactory.generatePublic(RSAKeyFactory.java:298)
at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(RSAKeyFactory.java:201)

共有1个答案

凌智
2023-03-14

使用以下代码将inputstream转换为字节数组。

InputStream keyfis = conf.getFileInputStream(publicKeyPath);
byte[] encKey = toByteArray(keyfis);
keyfis .close();

public static byte[] toByteArray(InputStream in) throws IOException {
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int len;
    // read bytes from the input stream and store them in buffer
    while ((len = in.read(buffer)) != -1) {
        // write bytes from the buffer into output stream
        os.write(buffer, 0, len);
    }
    return os.toByteArray();
}

请参考以下网址。多亏了下面这个实用方法的url的作者——toByteArray。

https://www.techiedelight.com/convert-inputstream-byte-array-java/

如果在同一个程序中验证签名,请在验证签名之前使用相同的方法将其转换为字节数组,否则它也会在那里给出错误。

 类似资料:
  • 在下面的情况下,我在理解Java泛型的行为时遇到了问题。 具有一些参数化接口和一些类上的方法,这些类返回扩展该接口的类,由、1.8Oracle JDK、OSX和Linux生成java编译错误,但不是由Eclipse IDE中的Eclipse编译器生成的(它也可以在Eclipse RCP OSGi运行时下运行),实现如下: ./Gradlew build 最简单的修复是删除方法签名中泛型定义的一部分

  • 问题内容: 我正在完成学校的实验任务,并且在编译时出现此错误。该程序运行良好,有点想修复导致错误的原因。程序代码和完整的错误如下。一如既往的感谢! 错误:注意:F:\ Java \ Lab 8 \ Lab8.java使用未经检查或不安全的操作。注意:使用-Xlint:unchecked重新编译以获取详细信息。 码: 问题答案: 这意味着Java编译器已经注意到您的代码存在一些潜在的不安全问题,并警

  • 这里是一位Java初学者,使用JDK 17和最新的Eclipse IDE。 当我试图使用“import”关键字时,这里出现了这个语法错误。我的Eclipse显示“import java.util.Scanner作为警告,当我试图运行时,我得到了一些奇怪的输出。 还有一件事,IntelliJ的一切都正常运行,我想问题在于Eclipse IDE。有办法解决这个问题吗? 代码: 输出: 你的名字叫什么?

  • 我正在尝试在windows 10上安装eclipse IDE for java。我已经安装了java 13.0.1。当我点击eclipse时。exe它表示发生错误,请参阅日志文件。这是日志文件 我已经检查了这些链接以解决我的问题。但他们都不为我工作。安装Eclipse IDE时出错 正在尝试安装Eclipse IDE

  • 问题内容: 使用node / express-我想从请求标头中获取一些JSON,但我想安全地做到这一点。 如果由于某种原因它不是有效的JSON,那很好,它可以返回false或其他任何值,它将拒绝请求并继续执行。问题是,如果它不是有效的JSON,则会引发语法错误。通常,我希望语法错误能够爆发,但在这种情况下不希望。 我是否会刮取堆栈并检查来自该特定模块的错误解析调用,如果是这种情况,它将忽略它?这似

  • 我的文件路径如下所示: 我的代码在应用程序文件夹中,我要加载的图片在资源中。 Im使用以下代码将图像从资源中获取到应用程序中的类中(图像是一个BuffereImage)。 这似乎在我的IDE(intellij)工作,因为我可以看到加载的图像,如图所示 但是,当我构建时,图像不会显示。我正在建造: 档案- 然后我构建工件- 所以当我去构建的罐子的目的地并运行它时,没有任何图片被显示 我通过提取包含图