【发布时间】:2015-03-22 00:39:57
【问题描述】:
我尝试使用“RSA/ECB/PKCS7Padding”进行加密。 JCE 不支持它。所以我下载了 Bouncy Castle 但似乎 Bouncy Castle 也不支持这种转换。以下代码:
Security.insertProviderAt(new BouncyCastleProvider(), 1);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS7Padding");
抛出
Caused by: java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/ECB/PKCS7Padding
at javax.crypto.Cipher.getInstance(Cipher.java:524)
....
Caused by: javax.crypto.NoSuchPaddingException: Unsupported padding PKCS7Padding
at sun.security.pkcs11.P11RSACipher.engineSetPadding(P11RSACipher.java:129)
at javax.crypto.Cipher$Transform.setModePadding(Cipher.java:360)
at javax.crypto.Cipher.getInstance(Cipher.java:517)
... 4 more
我做得对吗?
TIA。
【问题讨论】:
-
Cipher.getInstance("RSA/ECB/PKCS1Padding");适用于 bcprov-jdk16-1.46.jar
-
你可以使用规范bouncycastle.org/specifications.html中的算法
-
PKCS1 为 RSA 指定填充。 PKCS5/7 指定了块密码的填充,而 RSA 没有。
-
给出的要求是应该使用 RSA 并指定“PKCS7 with Padding”。没有提及该模式(ECB等)。我可以将 NONE 设置为模式吗?
-
我还想指出 PKCS#1v1.5 填充(通常称为 PKCS1 填充)已被破坏。应该使用 OAEP 填充(在 PKCS#1v2.0 中指定)。
标签: java encryption cryptography rsa bouncycastle