1

在对一些加密代码进行故障排除时,我看到了一个奇怪的堆栈跟踪层次结构。我已经解决了原始问题,但对如何生成这样的堆栈跟踪感到好奇。任何人都可以启发我吗?

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

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 上运行。

这可能是因为某些信息不可用,可能是由于运行时优化?还是一些故意的混淆?杰尼?

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

编辑:最初的问题NoSuchProviderException: JCE cannot authenticate the provider...(感谢 Siva 和 owlstead 让我想起签名的罐子 :)

4

3 回答 3

1

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

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

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

于 2012-08-22T18:18:50.543 回答
0

不是椭圆调用签名(可变参数编号)吗?

于 2012-08-22T18:17:20.223 回答
0

您的第三方加密提供商应签署所有 jar 文件,尤其是提供商 jar。SUN(现在是 oracle)应该信任该签名。

于 2012-08-22T17:47:20.417 回答