的代碼兩條線:使用BC密鑰或默認值有什麼區別?
KeyPairGenerator.getInstance("RSA")
KeyPairGenerator.getInstance("RSA", "BC")
效果很好。那麼,使用BC還是不同呢?
BC是否與默認的RSA完全兼容? (使用太陽JDK 6)
的代碼兩條線:使用BC密鑰或默認值有什麼區別?
KeyPairGenerator.getInstance("RSA")
KeyPairGenerator.getInstance("RSA", "BC")
效果很好。那麼,使用BC還是不同呢?
BC是否與默認的RSA完全兼容? (使用太陽JDK 6)
在BouncyCastle FAQ中有一些與RSA實現細節相關的條目。
我個人還沒有發現任何關於Sun和BC提供者不兼容的問題,並且我建議使用Java的本地RSA實現,如果BouncyCastle依賴可以被完全刪除。只有在獲得明確的好處時,才應該添加外部依賴關係。
如果您在項目的其他地方使用BC庫,我想使用哪個提供程序並不重要。
編輯
J2ME不包括RSA實現。因此,如果您打算將應用程序移植到J2ME,BouncyCastle庫現在是正確的選擇。
從Javadoc of the first constructor:
返回
KeyPairGenerator
對象 產生公鑰/私鑰對用於 指定的算法。此方法遍歷 已註冊的安全提供程序列表, 以最受歡迎的 提供程序開始。一個新的KeyPairGenerator 對象封裝了 KeyPairGeneratorSpi實現 從第一個提供程序支持 指定的算法返回。
請注意,可以通過
Security.getProviders()
方法檢索註冊的 服務提供商的列表。
的Security.getProviders()
反過來連接的Javadoc指出以下:
返回包含所有已安裝的提供的數組。 數組中提供者的順序是他們的偏好順序。
那麼,顯然卑詩省在你的情況「巧合」是第一個首選供應商。如果周圍存在不確定性(即,您想分發應用程序,並且您無法控制最終用戶的環境),並且希望讓它堅持使用BC,那麼您應該更喜歡使用第二個構造函數。
「BC」返回密碼算法的BouncyCastle實現。
如果不指定提供者,它將返回加密算法的「最優先」實現,即位置1的提供者是提供者數組中最優先的提供者。
並且提供者兼容?我可以使用另一個和我的客戶嗎? – 2010-06-01 14:00:57
> BC在您的案例中「巧合」第一首選供應商 其實並非如此。剛剛檢查過,即使未提供BC提供程序,第一個構造函數也能正常工作。 Java我有它自己的RSA提供者,我稱之爲'SunRsaSign'。 – hudolejev 2010-06-01 13:54:25
和供應商兼容嗎?我可以使用另一個和我的客戶嗎? – 2010-06-01 14:02:59
@Tom我想最好的辦法是嘗試一下,但我認爲不應該有任何問題。我個人使用BC和OpenSSL實現,並沒有遇到任何問題。 – hudolejev 2010-06-01 14:10:57