【发布时间】:2013-06-11 04:55:15
【问题描述】:
我正在 Java/Android 中实现加密代码以匹配 iOS 加密。在 iOS 中,使用以下填充方案使用 RSA 进行加密:PKCS1-OAEP
但是,当我尝试使用 PKCS1-OAEP 创建密码时。
Cipher c = Cipher.getInstance("RSA/None/PKCS1-OAEP", "BC");
下面是堆栈跟踪
javax.crypto.NoSuchPaddingException: PKCS1-OAEP unavailable with RSA.
at com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi.engineSetPadding(CipherSpi.java:240)
at javax.crypto.Cipher.getCipher(Cipher.java:324)
at javax.crypto.Cipher.getInstance(Cipher.java:237)
也许这个RSA/None/PKCS1-OAEP 不正确?但找不到任何明确的答案来说明 PKCS1-OAEP 不受支持或定义它的正确方法。
我使用的是 spongycastle 库,所以有完整的 bouncycastle 实现。
【问题讨论】:
-
没有更多细节很难说,但它可能类似于
RSA/None/OAEPWithSHA1AndMGF1Padding,例如。 -
@vcsjones 我在下面的bouncycastle.org/wiki/display/JA1/Frequently+Asked+Questions 中看到了这一点,但是虽然这确实超过了 NoSuchPaddingException,但它与“PKCS1-OAEP”的填充不同。哪些额外的细节会有所帮助?
-
OAEP 使用 some 类型的散列函数,它是 SHA1 还是其他取决于实现。我们需要更多地了解您的 iOS 实现。例如,如果您在 RSA_public_encrypt 函数中使用了
RSA_PKCS1_OAEP_PADDING,即 SHA1 和 MGF1。 developer.apple.com/library/ios/#documentation/System/…。你的 iOS 代码是什么样的?
标签: java android security bouncycastle