2011-12-25 81 views
5
cipher = Cipher.getInstance("Blowfish"); 

這引發一個異常java.security.NoSuchAlgorithmException:Cipher Blowfish實現未找到。在android中的Blowfish加密

我檢查了local_policy.jar和US_export_policy.jar都存在,並且它們從java安裝的那一刻起沒有改變。什麼會導致這個問題?

編輯:

Object[] o = Security.getAlgorithms("Cipher").toArray(); 
    for (int i=0; i<o.length; i++) { 
     System.out.println((String)o[i]); 
    } 

當我運行這段代碼,我得到列表,而「河豚」,但算法的名稱,如DES或RSA中也有一些不知名的名稱,如「1.2.840.113549.1.1.7」和那樣。爲什麼沒有Blowfish或者它隱藏在這些數字中?

回答

2

葉氏,我無法找到解決辦法,只是使用的GNU密碼庫。它工作正常。

2

cipher = Cipher.getInstance("Blowfish")

只有Android 2.3及以上的作品,所以它可能是你的目標是下方的Android 2.3?

編輯:如果你想建立,2.3假設4.0 ICS同時也支持較低的設備,你可以添加這樣的事情您的Manifest.xml:

<uses-sdk android:minSdkVersion="3" /> 
<uses-sdk android:targetSdkVersion="14" /> 

唯一的問題是你必須提供Blowfish作爲一個選項,對於2.3以下的任何人來說,這將不是一個加密方法的有效選擇(不可點擊/灰色),我假設。測試它!構建它,並在各種SDK版本上嘗試。祝你好運!

+0

我使用Android 2.1,那麼我如何在Android 2.1中使用Blowfish? – Sergey 2011-12-25 12:32:38

+0

不幸的是,你不能。但是,您可以始終以2.3爲目標,但允許使用較低版本的SDK。我將在上面的編輯中發佈代碼作爲解決方案。 – TryTryAgain 2011-12-25 12:33:56

+0

這就是問題所在,我需要2.1平臺 – Sergey 2011-12-25 12:51:42

2

如果您需要完整的平臺支持,我可以建議的唯一解決方案是使用外部軟件包。

Android自帶了BouncyCastle的剝離版本。我相信隨着版本的進步,會增加額外的功能。

但是,將完整的BouncyCastle jar導入到android會導致很多問題,因爲Android版本使用相同的名稱。

我用過的解決方案是使用SpongyCastle。我之前已經使用過它,但沒有查看源代碼以確保沒有進行任何更改。

指導安裝: How to include the Spongy Castle JAR in Android?

2

local_policy.jar和的US_export_policy.jar不與Android相關。您需要在Android上運行算法列表代碼以獲得有意義的結果。正如其他人所指出的,Android JCE提供程序基於Bouncy Castle,但不包含所有算法。您需要將完整的lib綁定到應用程序中才能使用所有算法。請使用Spongy Castle來簡化操作。在此之後,你只需要改變的是指定供應商爲「SC」:

Cipher c = Cipher.getInstance("Blowfish", "SC"); 
0

我在我的android應用程序中使用了blowfish加密。我不知道爲什麼,但blowfish加密已經在android上的彈性城堡庫中被註釋掉了。

我不得不下載彈性城堡資源,我將提供者名稱從BC更改爲BC2,並將軟件包名稱更名爲bouncycastle2,以避免與已在android sdk上的軟件包發生衝突。然後,我將這個自定義Bouncy Castle jar添加到我的應用程序中,作爲一個新的jar,它工作正常!