Java 加密提供程序 - 奇怪的堆栈跟踪

标签 java cryptography stack-trace jvm-hotspot nosuchproviderexception

在对一些加密代码进行故障排除时,我看到了奇怪的堆栈跟踪层次结构。我已经解决了原来的问题,但对如何生成这样的堆栈跟踪感到好奇。谁能帮我解答一下吗?

请注意,我无法逐字复制粘贴堆栈跟踪。我必须删除可能暴露专有代码的框架。

businesscode.BusinessException: Failed while generating session key
        at businesscode.businessthing.BusinessMethod(BusinessApp.java:NN)
        ... NN more
Caused by: java.security.NoSuchProviderException: JCE cannot authenticate the provider XXX
        at javax.crypto.SunJCE_b.a(DashoA13*..)
        at javax.crypto.KeyGenerator.getInstance(DashoA13*..)
        at businesslib.generateKey(BusinessLib.java:NN)
        ... NN more
Caused by: javax.util.jar.JarException: Cannot parse X.jar
        at javax.crypto.SunJCE_c.a(DashoA13*..)
        at javax.crypto.SunJCE_b.b(DashoA13*..)
        at javax.crypto.SunJCE_b.a(DashoA13*..)
        ... 25 more

为什么方法名称如a和b(SunJCE_c.a、SunJCE_b.b)文件/行信息如DashoA13*

Oracle Java 6 32 位,在 64 位 Linux 和 32 位 Windows 上运行。

这是否是因为某些信息不可用(可能是由于运行时优化)?还是故意混淆视听? JNI?

导致此问题的问题是第三方加密提供程序错误地打包在 jar 文件中。

编辑:最初的问题(NoSuchProviderException:JCE无法验证提供程序...)是由一个天真的构建过程引起的,该过程从原始jar中提取加密提供程序类并将它们重新打包到一个新的原始jar中 - 但没有所需的签名信息。 感谢 Siva 和 owlstead 提醒我签名 jar :)

最佳答案

这里有几个选项(我假设在此之前签名已经验证):

  1. 用于生成签名的证书/私钥现已过期;
  2. 签名与较新版本的 Oracle Java 运行时不兼容;
  3. .jar 内容的签名已删除或内容/签名已更改。

至于那些奇怪的名字;这些名称是已使用代码混淆器进行混淆的类的名称。它们不是公共(public) API 的一部分,因此您没有理由知道其中的内容。它们包含验证签名的代码,因此与安全相关。

关于Java 加密提供程序 - 奇怪的堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12078602/

相关文章:

ruby - 如何在 ruby​​ 中进行 base58 编码?

maven - 让 Maven Surefire 在控制台中显示堆栈跟踪

java - 在java中绘制多个对象?

java - 为什么下面给出的程序会得到不同的输出?

java - 从 SD 卡解压文件

java - junitbenchmark 的动态注释

c# - C# 线程中的 Bouncy CaSTLe SecureRandom 安全吗?

cryptography - 将 X.509 证书从十六进制格式转换为 .cer 格式

.net - 如何获取非当前线程的堆栈跟踪?

java - 确定当前调用堆栈(用于诊断目的)