自Android 2.3起,PSS签名验证失败

时间:2011-07-29 09:51:14

标签: android digital-signature

在我的应用程序中,我正在使用SHA1和RSA验证使用概率签名方案(PSS)签名的文件的数字签名。签名是在BouncyCastle的帮助下在J2SE中创建的。

在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版本)?

谢谢!

2 个答案:

答案 0 :(得分:3)

我设法让PSS签名工作的唯一方法是将我的签名提供商转换为Spongy Castle。

快速操作方法:

  1. 下载SpongyCastle JAR文件并将其放在libs / project文件夹中。我使用了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. 在getInstance()

    中用SC替换您的BC

    签名签名= Signature.getInstance(“SHA1withRSA / PSS”,“SC”);

  5. 缺点:你的二进制文件将包含1.5mb的奖金。

答案 1 :(得分:0)

我面临同样的问题。通过将Bouncy Castle移植到Android是唯一的方法吗?