c# RSA加密解密,与java代码互通问题

RSA加密解密原本是公开算法,但是和一个java的小伙伴对接却出现了点问题,现在记录一下

首先,RSA的公钥私钥,有2种:

1、pem格式。

2、xml格式。

文章底部有pem格式和对应的xml样本数据(样本数据太长,放在尾部)

对比样本数据知道,如果对方发过来的公钥私钥是带有类似 -----BEGIN PRIVATE KEY----- 这种字符串的,那肯定是pem格式的,如果用c#来使用的话,我们得先转为 xml 格式的,如果为了方便我们直接选一家在线转换的网站即可,比如 https://the-x.cn/certificate/PemToXml.aspx (有密钥泄露风险,可以选择自己写代码来转换,c#有一个库叫 BouncyCastle 可以转换)

这样一来就有对应的xml公钥和私钥了,然后,在用下面的c#代码进行加解密就可以了。

如果和java的小伙伴还有争议的话,可以选一个第三方网站作为参照,C#的小伙伴只要把字符串加密后丢到第三方网站能解密,第三方网站加密后的结果能被c#代码解密,代表c#就没问题了,java的小伙伴也做同样的操作,就可以不用老怀疑对方写的有问题了。。。。。
第三方网站比如:https://www.bejson.com/enc/rsa/

 /// <summary>
        /// RSA加密
        /// </summary>
        /// <param name="xmlPublickey"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public static string RSAEncrypt(string xmlPublickey, string content)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            byte[] cipherbytes;
            rsa.FromXmlString(xmlPublickey);

            cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);

            return Convert.ToBase64String(cipherbytes);
        }

        /// <summary>
        /// RSA解密
        /// </summary>
        /// <param name="xmlPrivatekey"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public static string RSADecrypt(string xmlPrivatekey, string content)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            byte[] cipherbytes;
            rsa.FromXmlString(xmlPrivatekey);
            cipherbytes = rsa.Decrypt(Convert.FromBase64String(content), false);

            return Encoding.UTF8.GetString(cipherbytes);
        }

  

 

 

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwF4/zAUR9+5DG3FPysdb
uM3cUARJFQUsNxXmKX9dVwe9rwqnTW2udMcXWmNvmrXIN78Rv38oEwDATww+/0W2
RXjPuUPOwnUieuAEvE6PGYspUtS/1Yhs01M+XmroEDjTmna09aGcDcSGYKgYNTK/
V+Hz3f2DR5/Uhd7tqJXx+0yDm8RJ6uQoDtWSba4XvyZcKN0qeNLCjmj1UHjtcI00
wSZvmtxWvSeBisDFnMPpybua9AwDRA4Ovr0SSatX6hkHwghih43RoHUr0uj2JZYC
qxhmiyQxQj/GPNTgxzhz59Ta+P7+DZ4ehVPgkKc7fAV6OKeGzL9tJKG26eHSLMR4
TwIDAQAB
-----END PUBLIC KEY-----
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDAXj/MBRH37kMb
cU/Kx1u4zdxQBEkVBSw3FeYpf11XB72vCqdNba50xxdaY2+atcg3vxG/fygTAMBP
DD7/RbZFeM+5Q87CdSJ64AS8To8ZiylS1L/ViGzTUz5eaugQONOadrT1oZwNxIZg
qBg1Mr9X4fPd/YNHn9SF3u2olfH7TIObxEnq5CgO1ZJtrhe/Jlwo3Sp40sKOaPVQ
eO1wjTTBJm+a3Fa9J4GKwMWcw+nJu5r0DANEDg6+vRJJq1fqGQfCCGKHjdGgdSvS
6PYllgKrGGaLJDFCP8Y81ODHOHPn1Nr4/v4Nnh6FU+CQpzt8BXo4p4bMv20kobbp
4dIsxHhPAgMBAAECggEAFz3L22xpZVkGBpTEHS3E6SkGCyzZX47GbslYi3712gP3
aOSSngo4X6eGLMeCvmBkFkghbs+AGfunQGWsXs8fXHliL3H/0wKv7cSPDek35NAp
Z/aITtYyv7149ZNZAky7VBgveNXTst4hlh/4/MRq1cVY32M3rzmiRaJPeGTVXZUF
LCXQE6tlgwjomAgCLzt2uOSmZ9sWMtAnFXFDrSnrZRNTbgzZLkIm3yCxzTpaY8GW
jok4pTwp9pCrD2XwQppSpMZtFGMGzIo8a7EL0ZZYftaZTHm1XkSdZ309qDrO4pfq
mvjErWmobVowpnXEqHhQ+l42Bx99o0NNjLIILJB70QKBgQDw0t9YrwczNN7K5zJW
/aZkMj5kBmjgK0uycL/hmWx81AkOwsNV4r62N6Oiq4IzSfvtXcyt/a7zPhx5cQcs
8VyWZr7XModS8HNsEjSXdN0r84h5x5HffGTSEyfIw1aG/3rTrVGnO6zL6GYlMnFZ
fKiMEnQ3Ag3SVh/d9qSNQREGXQKBgQDMfajdAtj5TJj3N1ERi1LmbZ67slEd4VMg
8GUDWw2PakdT/xSRA/HHNaRAbl/LH3dwioz0db5AmGcfuw7fXQJeHcIlI32AMFQ6
SoSqIZ4x6v+X07Rm2oxFDXZaHh7dy76rchtoFEaePF38hu88ITb9tfjX/j7eSk5Z
f/WHsrY2mwKBgQDLbVW9VByA5OhN/X5IfXtQqCCL3d45flkzIorzxuYdi/8auOrI
YgE3a0iO4NHbAWQN3m5Hi0N9tbnX2+Jz1G6hnakXn1cweG0HnVlPlyg9ODrQpARV
BH8l9YhlzpwI7UaUCJQw7/fHR0kBotqc/PBjYjNJRDLoulew5+eYap43AQKBgDzs
+5DNtmOghLqzSn4Vqp9o7bAykqR6a9AWj6IOUN335kSKbVA/gpu9ybBAsl3MhEON
pC15nzOTtLXpf6bhCUGNUDjMeCnnPFEZvqkJ1x48S+aqdsdmOgCg4DA9ZSjj+W0P
VEcQM3IVvlLsyP57Tu0MeJWx9H06WlmkHD1P66YdAoGAeO5dEj0Qw1zQmjm4p8o/
WQRzZzP7E+jCiGB3KecFsnBCLP1Lst1A6rOnF/KZdjSaNyqtCkVitIfUvKMi83Qz
YjUZctyyODRFTid/eNBFAmYdP8et5iCZXrb3LspfQTzQxE/4qwavNE3rdKKljrSU
5nVh7VZtyG1BZl3CsEwlgVQ=
-----END PRIVATE KEY-----

对应公钥xml格式

<RSAKeyValue>
  <Exponent>AQAB</Exponent>
  <Modulus>wF4/zAUR9+5DG3FPysdbuM3cUARJFQUsNxXmKX9dVwe9rwqnTW2udMcXWmNvmrXIN78Rv38oEwDATww+/0W2RXjPuUPOwnUieuAEvE6PGYspUtS/1Yhs01M+XmroEDjTmna09aGcDcSGYKgYNTK/V+Hz3f2DR5/Uhd7tqJXx+0yDm8RJ6uQoDtWSba4XvyZcKN0qeNLCjmj1UHjtcI00wSZvmtxWvSeBisDFnMPpybua9AwDRA4Ovr0SSatX6hkHwghih43RoHUr0uj2JZYCqxhmiyQxQj/GPNTgxzhz59Ta+P7+DZ4ehVPgkKc7fAV6OKeGzL9tJKG26eHSLMR4Tw==</Modulus>
</RSAKeyValue>

  对应私钥xml格式

<RSAKeyValue>
<D>ZhmWm6OJZeVns6sTkBshpxbOw88ePD9YFWZoTC2pY70Aan8eMdemareYB2b16cf+QvBL/M/Ik6NBxgMust88xYV9pN0Txsno2s8DWB0h6JKDc3mU+zwiFz9GIuEpndbdWcvPcbE6VgkeFgnGYcLpx3Gx1gD5iE07lVolCUrlHp7uV23jm8CSd/aiP29uVD903r+BSJbsynVs6LClZ3TOFYtuFP9Iu905OYL2b8b5C5wjMbdfdPtMf2NGzTEsuwo0GNMZs9XBhDyYz9jvOoiusiou1MVaON9z805fNvLN2xKRAYu+gtmfIhjk8+m56EVyW3n4JQEQYgb5aD83KWZ8IQ==</D>
<DP>HLAEKJf+bWQb+LpityHyXWZMSgGaxxH+fKRPfL1wTgYq7pvGG50sFQLG+RKz7DcsXn0NU8dyZO8K3ZVk0CPy/ZFq9bf4xEt/9XBFqQFAxZCtys9puV9CmE7HitCuW1M8heIFjJZ0L2wBpQDxJqqO2DiUJLDwOY4uNkrfLegVx8E=</DP>
<DQ>K3UgHl2qCLVwBgBsVY2Jj+0SyEmDY8WWpTJ+f2U4/+nSoNEwCXx6ZKAKvtrhV4zvENv6PTddg9+mk7U3DKNiW/oU+1MBO6tJMBWJOx/lnoZ1KUd0v/f5I+/RNLrDfDPOA0QzhNwVZAl9iqSkx76Pg/LJEgjSj2ZDBb3TSRZby6E=</DQ>
<Exponent>AQAB</Exponent>
<InverseQ>M1YfvCVCOuflOFLyfsCn7n1IXS9S1KyiPZjVszBC7g2JeXBCsbK01qH8JfhQ/N9o4LcmJ9hr0893LYirdCy4nLbOUiCrXWnfqSZNQYjND4//0VwwK/aOFPEZygjNlhi8S6ZW8V3+1EA6pCtzBVw241L8jGVx2dV0KQgsnAhJGHg=</InverseQ>
<Modulus>2tInX9DkdeXX3/FThKgE6F7RO24dNk3X589KY1J7usTSQsk2bs6q2pp7X+PZMdpgr1N3P4xQXTFp3xtj1WuzHsBtHtbXZ3sNsZ9bkkRY44xE3bFcCZ6/fYvC53km4OLeLN2YFef5KZg9z1viMVIMOctRoWfqLVkMp5VltCsEfdoXYJymhIbNRIPCHJOe7pRwfJ4fsCbumHAYY0J05K3ozR7eXDcJKP/mSYqHyfwK/DqeoH0YtPR1/aKtuiz0+QJ9Bk5/BRva+lwFk3LTpk/ReJJNklBMm898JQ5tU49wk26j0bLJDo1KyYpnTqoQ70kmBLWZzCExNyETxFTNPEUVIw==</Modulus>
<P>7jpqaofyrjWAezX1aNxd60Lgeu+tPYb+Am0gFS33SgnkY1kIafvWjN+Pwo1U88YmVKToirrIeog7k4k5qNTk7l31EqZK4Bb5acFM+/FEFM6sbGG4Zw4DGZsMYM1OHFZo4CnkMCNRSQ5v4PGJp17EiL1RyOQA3AHPGVYz7QhLQDE=</P>
<Q>6yUbIMGdYxMfWqQQsm2M91j/b9u5Q3yrWHUWXBASXr/M0m0/zYm4VG03xqD59tUw/TCYCSopKC7jqgOb8FOCL0UCJLEhyigB7mNIYkOmsBt4Yq0a33c7GDMsZbTCmVkoDel8TW8jgtnRwdJVe4FWScVur43LFHoiEkeL0C7FiZM=</Q>
</RSAKeyValue>

  

posted @ 2022-02-19 10:49  LoveCoder  阅读(1578)  评论(0编辑  收藏  举报