在對某些加密代碼進行故障診斷時,我看到了一個奇怪的堆棧跟蹤層次結構。我已經解決了原始問題,但對如何生成這樣的堆棧跟蹤感到好奇。任何人都可以啓發我嗎?Java加密提供程序 - 奇怪的堆棧跟蹤
請注意,我不能複製粘貼堆棧跟蹤逐字。我必須關閉可以暴露專有代碼的框架。
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提醒我簽名罐子:)
請注意,如果.jar文件不包含任何簽名,它們可能在OpenJDK/JRE上運行,但不在Oracle JDK/JRE上運行。 –
謝謝,貓頭鷹。發生的事情是一個天真的工具從提供的(簽名,有效的)提供程序jar中提取所有類,並將它們打包在一個新的jar中 - 不包括原始META-INF /中的所有信息。 您對混淆的確認是我想要的。 – Ishan
添加第三個理由給我的回覆,很高興你發現問題,謝謝接受。 –