首页 > 解决方案 > 登录 java 时如何修复或避免“检测到 RSA 引擎错误解密/签名”错误

问题描述

我正在尝试在 Android 上使用 SpongyCastle 的基本 RSA 代码对字符串进行签名:

Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
...


    Signature sign = Signature.getInstance("SHA256withRSA");
    RSAPrivateKey privateKey = parsePrivateKey( pk_pem_string );
    sign.initSign(privateKey, new SecureRandom());
    sign.update(content.getBytes("UTF-8"));
    byte[] signature = sign.sign();

但它失败并出现此错误:

E/AndroidRuntime( 3392): Caused by: java.security.SignatureException: java.lang.IllegalStateException: RSA engine faulty decryption/signing detected
E/AndroidRuntime( 3392):    at org.spongycastle.jcajce.provider.asymmetric.rsa.DigestSignatureSpi.engineSign(DigestSignatureSpi.java:142)
E/AndroidRuntime( 3392):    at java.security.Signature$Delegate.engineSign(Signature.java:1418)
E/AndroidRuntime( 3392):    at java.security.Signature.sign(Signature.java:739)

我发现生成此错误是为了防止 RSA-CRT 攻击,但没有关于如何修复或防止该问题的更多信息。我需要使用 SHA256withRSA 进行签名,因为我需要与期望使用该算法签名的内容的外部 API 进行交互。

如果我使用默认的 Android 安全提供程序,则登录失败并显示:

Caused by: java.lang.RuntimeException: error:04000044:RSA routines:OPENSSL_internal:internal error

标签: androidrsabouncycastlespongycastle

解决方案


推荐阅读