我们有一个要求,在 Java 中进行加密,在 .NET 中进行解密。问题在于 .NET 中的非对称解密、Java 中使用的算法、模式和填充,而加密为“RSA/ECB/OAEPWithSHA-256AndMGF1Padding”。在.NET上,我尝试以各种不同的方式解密RsaCng、Rsa、Chilkat Rsa、带有OAEP填充的Bouncy Castle,但到目前为止没有任何效果。下面是代码片段。只有当Java的加密方式改为“RSA/ECB/OAEPWithSHA-1AndMGF1Padding”时,.NET才能够解密,但出于安全原因,Java无法更改加密方式。我们使用 PEM 文件进行解密,同时使用 CERT 进行加密。请让我们知道解决该问题的最佳方法。这与创建基于 SHA256 哈希的 PEM 文件有关吗?如果有人能帮助我,我将不胜感激。
下面提到了错误。RsaCng 和 Rsa:- 参数不正确。RsaCryptoService:- 解码 OAEP 填充时发生错误。Bouncy Castle:- 它给出了一个带有符号的 alpha-unicode 字符串。Chilkat:- 返回 null。
非对称加密的 Java 代码段:-
// Encrypt the symetric key
X509Certificate cert = ConduentCertificateLocator.getConduentCertificate();
PublicKey certKey = cert.getPublicKey();
Cipher c2 = Cipher.getInstance("RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING");
//Cipher c2 = Cipher.getInstance("RSA");
c2.init(Cipher.ENCRYPT_MODE, certKey);
byte[] inputCertKey = key.getEncoded();
byte[] encryptedKey = c2.doFinal(inputCertKey);
String encryptedKeyUrl = encodeToURL(encryptedKey);
Run Code Online (Sandbox Code Playgroud)
用于非对称解密的.NET 片段:- 我们确实尝试了几种不同的方法。下面是代码。
A。RSAC加密服务
using (RSACryptoServiceProvider csp = new RSACryptoServiceProvider())
{ …Run Code Online (Sandbox Code Playgroud)