2012-12-05 71 views
23

我正在使用某種加密技術在JAVA中創建基於swing的應用程序。但 javax.crypto.KeyGenerator.getInstance( 「AES」, 「BC」)給出了異常:JCE無法在java swing應用程序中驗證提供程序BC

java.security.NoSuchProviderException: JCE cannot authenticate the provider BC 
     at javax.crypto.SunJCE_b.a(DashoA13*..) 
     at javax.crypto.KeyGenerator.getInstance(DashoA13*..) 

那麼是什麼問題?

+8

java.lang.SecurityException: JCE cannot authenticate the provider SC 

更多信息通常意味着你已經做了一些錯誤的類/瓶和/或類路徑的包裝。你不能從他們的jar中提取BC類並將它們放入另一個jar中。 –

回答

25

要擴展來自GregS的評論,所有JCE提供程序JAR都必須進行簽名,然後才能被Java運行時信任。

BouncyCastle盡職盡責地提供可以正常工作的簽名JAR。但是,如果您從該JAR中提取類文件或重新編譯源代碼,它將刪除簽名並導致Java拒絕代碼。

看到這個相關的SO問題:How to sign a custom JCE security provider

+7

我沒有提取或重新編譯jar文件,我只從http://repo2.maven.org/maven2/org/bouncycastle/下載bcprov-jdk14和bcpkix-jdk14;然而,它不適合我! –

23

1. 編輯的jre \ lib \ security中\ java.security

添加security.provider.10 = org.bouncycastle.jce.provider.BouncyCastleProvider

2. 複製BC的* .jar到JRE \ lib中\分機

+0

爲什麼這個建議下來投票?它確實幫助了我:http://stackoverflow.com/questions/27168951/jce-cannot-authenticate-the-provider-bc-when-running-a-jar – Anton

+0

這是唯一幫助我的東西。 –

+1

這對我很好!我使用jython,儘管我直接指定了jar文件(沒有單獨提取類文件),但我得到了異常聲明。可能jython會提取它。好的解決方案謝謝! – rsmoorthy

3

對於那些尋找這個問題,但實際使用SpongyCastle,這可能是有趣知道,在Android沒有這樣的簽名測試,並且對於您的測試,您可以通過openJDK-8使用SpongyCastle,因爲它並不關心簽名。

僅供參考,以SpongyCastle錯誤讀取:在this issue

相關問題