java中的oaep_java - C#等同于Java RSA / ECB / OAEPWithSHA-256AndMGF1Padding - SO中文参考 - www.soinside.com...

本文探讨了在Java中使用RSA/ECB/OAEPWithSHA-256AndMGF1Padding进行字符串加密,并尝试在C#中解密的过程。作者在尝试从PKCS1Padding切换到OAEPPadding时遇到了问题,即加密成功但在C#中解密失败,提示“解码OAEP填充时出错”。文中提供了Java加密和C#解密的具体代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我试图在Java中加密字符串并在C#中解密。我首先尝试使用RSA / ECB / PKCS1PADDING,它就像一个魅力,但现在我正在尝试切换到OAEP填充,但我无法使其工作。加密工作正常但不解密。我改变的唯一事情是Java中的算法名称,在C#中我将rsa.Decrypt(data,true)从false更改为true。它需要更多变化吗?

我得到的例外是“解码OAEP填充时出错”。

我的Java加密方法:

public byte[] rsaEncrypt(byte[] data) {

byte[] cipherData;

try {

RSAPublicKeySpec keySpec = new RSAPublicKeySpec(pubMod, pubExp);

KeyFactory fact = KeyFactory.getInstance("RSA");

PublicKey pubKey = fact.generatePublic(keySpec);

Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");

cipher.init(Cipher.ENCRYPT_MODE, pubKey);

cipherData = cipher.doFinal(data);

return cipherData;

} catch (NoSuchAlgorithmException | IllegalBlockSizeException | InvalidKeyException | InvalidKeySpecException | NoSuchPaddingException | BadPaddingException e) {

e.printStackTrace();

}

return null;

}

我的C#解密方法:

private string RSADecrypt(byte[] data)

{

const string PrivateKey = *the key*;

const int PROVIDER_RSA_FULL = 1;

const string CONTAINER_NAME = "Tracker";

CspParameters cspParams;

cspParams = new CspParameters(PROVIDER_RSA_FULL);

cspParams.KeyContainerName = CONTAINER_NAME;

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspParams);

rsa.FromXmlString(PrivateKey);

byte[] decrypted = rsa.Decrypt(data, true);

String decryptedString = System.Text.Encoding.UTF8.GetString(decrypted);

return decryptedString;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值