2011-07-29 24 views
2

在我的應用程序中,我正在使用SHA1和RSA驗證使用概率簽名方案(PSS)簽名的文件的數字簽名。簽名是在BouncyCastle的幫助下在J2SE中創建的。自Android 2.3以來,PSS簽名驗證失敗

在Android應用程序中,此驗證迄今運行良好(例如2.1,2.2)。在Android 2.3設備/模擬器上測試應用程序時,我收到NoSuchAlgorithmException。

NoSuchAlgorithmException: Signature SHA1withRSA/PSS implementation not found 

相關的代碼我使用驗證簽名如下:

Signature signature = Signature.getInstance("SHA1withRSA/PSS", "BC"); 
signature.setParameter(new PSSParameterSpec(64)); 
signature.initVerify(thePublicKey); 
signature.update(theMessage.getBytes()); 
boolean signatureIsValid = signature.verify(theSignature); 

發生了什麼事,因爲Android 2.2系統,爲什麼算法「SHA1withRSA/PSS」,從「BC」提供者取消?

有沒有人可以選擇(最好適用於所有Android版本)?

謝謝!

回答

0

我正面臨同樣的問題。通過將Bouncy Castle移植到Android是唯一的方法,自己動手嗎?

2

我設法讓PSS簽名工作的唯一方法是將我的簽名提供者切換到Spongy Castle。

快速操作指南:

  1. 下載SpongyCastle JAR文件,並把它放在你的庫/項目文件夾。我使用APG的JAR:http://code.google.com/p/android-privacy-guard/source/browse/lib/bcprov-jdk16-146.jar?name=apg_service
  2. 如果使用Eclipse,通過將其屬性添加文件到您的項目 - > Java構建路徑 - >庫 - >添加JAR文件... - >選擇文件
  3. 在您的簽名類的某處添加以下行

    static { Security.addProvider(new org.spongycastle.jce.provider.BouncyCastleProvider()); }

  4. 與SC替換您BC中的getInstance()

    簽名簽名= Signature.getInstance( 「SHA1withRSA/PSS」, 「SC」);

缺點:您的二進制文件將包含1.5mb的獎金。