RSA加密 C# 和 JAVA无法互通
C#利用xml公钥进行加密
Java利用私钥进行解密
Java总是无法解密成功
在网上找了各种开源的实现
xml 转 pem啊
pksc1 转 PKSC8 啊
不是报超长的错,就是Decryption error
C# 端的代码是不许更改的,只能改java去兼容
密钥是随机生成的,随便拿其中一个举例子
/**
* xml私钥
* 要解密的字符串
*/
public static string RSADecrypt(string xmlPrivateKey, string decryptString)
{
try
{
RSACryptoServiceProvider rSACryptoServiceProvider = new RSACryptoServiceProvider();
rSACryptoServiceProvider.FromXmlString(xmlPrivateKey);
byte[] rgb = Convert.FromBase64String(decryptString);
byte[] bytes = rSACryptoServiceProvider.Decrypt(rgb, fOAEP: false);
return new UnicodeEncoding().GetString(bytes);
}
catch(Exception ex)
{
throw ex;
}
}
public static string RSAEncrypt(string xmlPublicKey, string encryptString)
{
try
{
RSACryptoServiceProvider rSACryptoServiceProvider = new RSACryptoServiceProvider();
rSACryptoServiceProvider.FromXmlString(xmlPublicKey);
byte[] bytes = new UnicodeEncoding().GetBytes(encryptString);
byte[] inArray = rSACryptoServiceProvider.Encrypt(bytes, fOAEP: false);
return Convert.ToBase64String(inArray);
}
catch(Exception ex)
{
throw ex;
}
}
公钥
<RSAKeyValue>
<Modulus>x2wFUbicePuwimH3NI4fJtnNgEHRY8AFSlZY8DhBvOdXq15vA0/UFz6vbO3tnDQxGqehzOwhaYd6e6Z+ZmN9kUnuIqTxFlsKxpDYvXfZjuwM+kfpJBrx6TxFEACOspdXqeYzAZDdGThu2CqTsgjo8ZY0EJClVK1n29RcnD6THtGAiIAwUWWhu+RhXYQ0822RxQwDIGphAqnnyJwpjmllsQ==</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>
私钥
<RSAKeyValue>
<Modulus>x2wFUbicePuwimH3NI4fJtnNgEHRY8AFSlZY8DhBvOdXq15vA0/UFz6vbO3tnDQxGqehzOwhaYd6e6Z+ZmN9kUnuIqTxFlsKxpDYvXfZjuwM+kfpJBrx6TxFEACOspdXqeYzAZDdGThu2CqTsgjo8ZY0EJClVK1n29RcnD6THtGAiIAwUWWhu+RhXYQ0822RxQwDIGphAqnnyJwpjmllsQ==</Modulus>
<Exponent>AQAB</Exponent>
<P>7Izxh8oFQfHxoPDAlp/KzAX/CbQuK8gl5YirObf0eb6sKTZdpcAHYcinD4Ihem3zkV/hm1eOZ/341BZDDj6120IxpVfXx0RgbeqPvg92AgM=</P>
<Q>19GSiY/XCM4ZxKZo8+UUE+qnRMWeC0rC+cQevjPzlmMIRdbO0B+NYz/Uu72EA3KKS5gfI3FRbYGCtvduQlycoKVsUSObtETceOpCiv75pTs=</Q>
<DP>JtKrAWJCoqQWyBc7RH1NR1bkmK8dtMnQjm9zyrFKSoDkuI7Xp9BwZbgM0xrEa9eH1iAqYthn4uFn6UcOElRwfF/Mzhowq9+pA+EvXj4jXAk=</DP>
<DQ>iakhCmPYqsIkB56J9YBaZTXZCfHvlI5UfdKONY6XwoZawYl6E6D8o6EUhcgly7kk44Ed45KleO8SPLjo+KVwNrwtsje/WqZN50atuVFYVf8=</DQ>
<InverseQ>NPsUuCuEhUqTDnS61a78H1Bnd/He8ztIzYDo+t6pM0BbRrTM2J+fPYfJSF0nRVj7TuY+5GcQZRCoRJGq1y+nTxEQdLWArZtSnlGEyuPNum0=</InverseQ>
<D>MZDOraYl9ggQtARvbfeZFI3z/tndEl7qsbROfL5u0GXrq2NYUkloHLLu5TMp6LYsMkTR+V4DW/hZYBxctFQsJI1si93VMkpEnl/oDweX4mamz1hY7SKvZ5SHJsDCgB6mWzvfMEOXRGBH/EtxzEfju5+Q2Svwg7kw1zjfQFWoKwqcz9BtRpKC1cz033g6Ww+4WoX8zI+1L34BS5a0nvpS9Q==</D>
</RSAKeyValue>
要被加密的文本
0-GjkYclhkx2MxneE1CIWqEma6dU-ivFS1UWp4r2X4EmkH1AKtXiAU5vSfTAIkuH
C# 调用encrypt方法后得到的其中一次结果
wwEw4f-NtvrCAW+Pbrg6fvdJVX0EIShlDZ4C1p47glbD-BcTwmftO5IXukqBvMRXJzzajGAmLuzIe+GOJo-vhF5AOeVo06StdXMMWIpqsow4rZzZiq+7tbYw5jw8c2fZzyyNqMVIM4wkz+lyTNrnxh7kYY2mXHSaMxAS5pQNcMOZSMMzD9pSPhG5+imQT2mbZhFpbFE9LDPyaKk2CUdqjg==
这一段扔到java程序里次次报错
网上找了各种开源实现都没有用,是哪里的编码不对吗?
C#端对文本进行了一次Unicode编码,这个会导致生成的密文java端无法解析吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
看一下这边文章,用工具转换成xml格式就可以在c#里用了:https://cloud.tencent.com/dev...
在 java 中是用的Pem格式的密钥,而在 c# 中用的是 xml 格式的密钥,所以在用的时候要用工具转换一下