我遇到过 Java 程序使用 RSA/ECB/OAEPWithSHA-256AndMGF1Padding 加密文本的情况。
我需要在 C# 中解密它。
Java 中的加密和解密工作正常。
使用 RSA/ECB/OAEPWithSHA-1AndMGF1Padding 在 Java 中加密并在 C# 中解密工作得非常好。
但是,使用 Java 中的 RSA/ECB/OAEPWithSHA-256AndMGF1Padding 加密和 C# 中的 OaepSHA256 解密会出现错误:参数不正确。
用于加密的Java代码:
public static String encrypt(KeyPair keypair, String data) throws NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
Cipher c = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
//Cipher c = Cipher.getInstance("RSA/ECB/OAEPWithSHA-1AndMGF1Padding");
c.init(Cipher.ENCRYPT_MODE, keypair.getPublic());
return Base64.getEncoder().encodeToString(c.doFinal(data.getBytes()));
}
Run Code Online (Sandbox Code Playgroud)
解密的C#代码:
public string DecryptRsa(byte[] encryptedBytes, X509Certificate2 x509Certificate2, RSAEncryptionPadding rSAEncryptionPadding)
{
var text = string.Empty;
using (RSACng csp = (RSACng)x509Certificate2.GetRSAPrivateKey())
{
byte[] bytesDecrypted = csp.Decrypt(encryptedBytes, rSAEncryptionPadding); …Run Code Online (Sandbox Code Playgroud)