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>

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM