在bouncycastle中是否支持RSA PKCS1-OAEP填充?

我正在Java / Android中实现encryption代码以匹配iOSencryption。 在iOS中,使用以下填充scheme使用RSA进行encryption:PKCS1-OAEP

但是,当我尝试使用PKCS1-OAEP创build密码时。

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不被支持或者定义它的正确方法。

我正在使用海绵城堡库,所以有充分的bouncycastle实现。

Solutions Collecting From Web of "在bouncycastle中是否支持RSA PKCS1-OAEP填充?"

第一个答案中的代码确实有效,但不推荐使用,因为它使用BouncyCastle内部类,而不是JCA通用接口,使代码BouncyCastle具体。 例如,这将使它很难切换到SunJCE提供商。

充气城堡版本1.50支持以下OAEP填充名称。

  • RSA / NONE / OAEPWithMD5AndMGF1Padding
  • RSA / NONE / OAEPWithSHA1AndMGF1Padding
  • RSA / NONE / OAEPWithSHA224AndMGF1Padding
  • RSA / NONE / OAEPWithSHA256AndMGF1Padding
  • RSA / NONE / OAEPWithSHA384AndMGF1Padding
  • RSA / NONE / OAEPWithSHA512AndMGF1Padding

然后,适当的RSA-OAEP密码初始化将如下所示

 Cipher c = Cipher.getInstance("RSA/NONE/OAEPWithSHA1AndMGF1Padding", "BC"); 

下面的代码可以工作,如果其他人被困在类似的encryption编码/填充问题

  SubjectPublicKeyInfo publicKeyInfo = new SubjectPublicKeyInfo( ASN1Sequence.getInstance(rsaPublicKey.getEncoded())); AsymmetricKeyParameter param = PublicKeyFactory .createKey(publicKeyInfo); AsymmetricBlockCipher cipher = new OAEPEncoding(new RSAEngine(), new SHA1Digest()); cipher.init(true, param); return cipher.processBlock(stuffIWantEncrypted, 0, 32);