在对某些加密代码进行疑难解答时,我看到了一个奇怪的堆栈跟踪层次结构。我已经解决了orignal问题,但对如何生成这样的堆栈跟踪感到好奇。谁能开导我?
请注意,我无法逐字复制粘贴堆栈跟踪。我必须忽略可能暴露专有代码的帧。
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 cannot authenticate the provider...
)是由一个天真的构建过程引起的,该过程从其原始jar中提取加密提供程序类并在一个新的原始jar中重新打包它们 - 但没有所需的签名信息。
感谢Siva和owlstead提醒我签名的罐子:))
答案 0 :(得分:1)
这里有一些选项(我假设在此签名确认之前):
.jar
内容的签名或更改了内容/签名。至于奇怪的名字;这些名称是使用代码混淆器进行模糊处理的类的名称。它们不是公共API的一部分,因此您没有理由知道其内容。它们包含验证签名的代码,因此与安全相关。
答案 1 :(得分:0)
您的第三方cryto提供商应该签署所有jar文件,尤其是提供者jar。 SUN(现在是oracle)应该信任该签名。
答案 2 :(得分:0)
它不是椭圆调用签名(变量参数号)吗?