Java JCE 无法在 jarsplice 创建的 jar 中验证提供者 BC

标签 java securityexception

我正在开发一款游戏,并且正在使用 Slick2D 库。我也在使用 bouncycaSTLe 进行加密。然后我使用 jarsplice 将所有内容打包到一个漂亮的可执行文件中。它运行良好,直到它需要加密一些东西。它给了我一个 java.lang.SecurityException: JCE cannot authenticate the provider BC 我正在使用一个签名的 jarfile ( http://www.bouncycastle.org/download/bcprov-jdk15on-150.jar )

这是堆栈跟踪

 java.lang.SecurityException: JCE cannot authenticate the provider BC
    at javax.crypto.Cipher.getInstance(Cipher.java:642)
    at javax.crypto.Cipher.getInstance(Cipher.java:580)
    at net.matrixstudios.zenerith.networking.ZenerithLogin.encryptLogin(ZenerithLogin.java:159)
    at net.matrixstudios.zenerith.networking.ZenerithLogin.<init>(ZenerithLogin.java:112)
    at net.matrixstudios.zenerith.MultiplayerMenu$1.performAction(MultiplayerMenu.java:90)
    at net.matrixstudios.zenerith.gui.menu.MenuGameState.clickButton(MenuGameState.java:83)
    at net.matrixstudios.zenerith.gui.menu.MenuGameState.checkForButtonClicks(MenuGameState.java:75)
    at net.matrixstudios.zenerith.gui.menu.MenuGameState.update(MenuGameState.java:51)
    at net.matrixstudios.zenerith.gui.menu.AbstractGameState.update(AbstractGameState.java:47)
    at org.newdawn.slick.state.StateBasedGame.update(StateBasedGame.java:266)
    at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:663)
    at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:411)
    at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:321)
    at net.matrixstudios.zenerith.gui.Window.<init>(Window.java:28)
    at net.matrixstudios.Main.main(Main.java:28)
Caused by: java.util.jar.JarException: file:/C:/Users/M4trixSh4d0w/Desktop/Zenerith_Alpha.0.2.1.5.jar has unsigned entries - org/bouncycastle/LICENSE.class
    at javax.crypto.JarVerifier.verifySingleJar(JarVerifier.java:462)
    at javax.crypto.JarVerifier.verifyJars(JarVerifier.java:322)
    at javax.crypto.JarVerifier.verify(JarVerifier.java:250)
    at javax.crypto.JceSecurity.verifyProviderJar(JceSecurity.java:161)
    at javax.crypto.JceSecurity.getVerificationResult(JceSecurity.java:187)
    at javax.crypto.Cipher.getInstance(Cipher.java:638)
    ... 14 more

那么我如何验证要运行的 jarfile 呢? 这是一个独立的可执行 jar 文件。

最佳答案

我是一名 Android 开发人员,当我将编译和构建工具升级到 Android 12 (31) 时出现此错误,我尝试了很多方法来修复它,最后我发现唯一可行的方法是将 JDK 更改为11.0.14.1 (x86_64)版本,我在Mac M1上工作,这个版本的下载链接是:https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html

关于Java JCE 无法在 jarsplice 创建的 jar 中验证提供者 BC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22160780/

相关文章:

具有可选 css 类的 Java Freemarker 宏

java - Java 可以动态生成 Unicode 字符吗?

java - 如何用Java读取Excel中的特定行?

java - if-else 的代码约定,用于 Java 中的语句

java - 不抛出异常类型处理时出现问题 - 想要一个更通用的多捕获版本

android - Web View java.lang.SecurityException : No permission to modify given thread

c# - 由 Directory.Delete() 引起的 WCF 安全异常

java - 本地通知引发SecurityException

java - 从 JWS 签名的 jar 中获取用户主文件夹

android - SecurityException: 未能找到用户 0 的提供程序 null;在 ActiveAndroid 上 Android 8.0