当前位置:Gxlcms > asp.net > .NET使用RSA加密解密的方法

.NET使用RSA加密解密的方法

时间:2021-07-01 10:21:17 帮助过:39人阅读

本文实例为大家分享了.NET使用RSA加密解密的具体代码,供大家参考,具体内容如下

PassWordHelper.cs代码:

  1. using System;
  2. using System.IO;
  3. using System.Text;
  4. using System.Globalization;
  5. using System.Collections.Generic;
  6. using System.Security.Cryptography;
  7. namespace Utils
  8. {
  9. /// <summary>
  10. /// 密码加密解密操作相关类
  11. /// </summary>
  12. public static class PassWordHelper
  13. {
  14. #region MD5 加密
  15. /// <summary>
  16. /// MD5加密
  17. /// </summary>
  18. public static string Md532(this string source)
  19. {
  20. if (string.IsNullOrEmpty(source)) return null;
  21. var encoding = Encoding.UTF8;
  22. MD5 md5 = MD5.Create();
  23. return HashAlgorithmBase(md5, source, encoding);
  24. }
  25. /// <summary>
  26. /// 加盐MD5加密
  27. /// </summary>
  28. public static string Md532Salt(this string source, string salt)
  29. {
  30. return string.IsNullOrEmpty(source) ? source.Md532() : (source + "『" + salt + "』").Md532();
  31. }
  32. #endregion
  33. #region SHA 加密
  34. /// <summary>
  35. /// SHA1 加密
  36. /// </summary>
  37. public static string Sha1(this string source)
  38. {
  39. if (string.IsNullOrEmpty(source)) return null;
  40. var encoding = Encoding.UTF8;
  41. SHA1 sha1 = new SHA1CryptoServiceProvider();
  42. return HashAlgorithmBase(sha1, source, encoding);
  43. }
  44. /// <summary>
  45. /// SHA256 加密
  46. /// </summary>
  47. public static string Sha256(this string source)
  48. {
  49. if (string.IsNullOrEmpty(source)) return null;
  50. var encoding = Encoding.UTF8;
  51. SHA256 sha256 = new SHA256Managed();
  52. return HashAlgorithmBase(sha256, source, encoding);
  53. }
  54. /// <summary>
  55. /// SHA512 加密
  56. /// </summary>
  57. public static string Sha512(this string source)
  58. {
  59. if (string.IsNullOrEmpty(source)) return null;
  60. var encoding = Encoding.UTF8;
  61. SHA512 sha512 = new SHA512Managed();
  62. return HashAlgorithmBase(sha512, source, encoding);
  63. }
  64. #endregion
  65. #region HMAC 加密
  66. /// <summary>
  67. /// HmacSha1 加密
  68. /// </summary>
  69. public static string HmacSha1(this string source, string keyVal)
  70. {
  71. if (string.IsNullOrEmpty(source)) return null;
  72. var encoding = Encoding.UTF8;
  73. byte[] keyStr = encoding.GetBytes(keyVal);
  74. HMACSHA1 hmacSha1 = new HMACSHA1(keyStr);
  75. return HashAlgorithmBase(hmacSha1, source, encoding);
  76. }
  77. /// <summary>
  78. /// HmacSha256 加密
  79. /// </summary>
  80. public static string HmacSha256(this string source, string keyVal)
  81. {
  82. if (string.IsNullOrEmpty(source)) return null;
  83. var encoding = Encoding.UTF8;
  84. byte[] keyStr = encoding.GetBytes(keyVal);
  85. HMACSHA256 hmacSha256 = new HMACSHA256(keyStr);
  86. return HashAlgorithmBase(hmacSha256, source, encoding);
  87. }
  88. /// <summary>
  89. /// HmacSha384 加密
  90. /// </summary>
  91. public static string HmacSha384(this string source, string keyVal)
  92. {
  93. if (string.IsNullOrEmpty(source)) return null;
  94. var encoding = Encoding.UTF8;
  95. byte[] keyStr = encoding.GetBytes(keyVal);
  96. HMACSHA384 hmacSha384 = new HMACSHA384(keyStr);
  97. return HashAlgorithmBase(hmacSha384, source, encoding);
  98. }
  99. /// <summary>
  100. /// HmacSha512 加密
  101. /// </summary>
  102. public static string HmacSha512(this string source, string keyVal)
  103. {
  104. if (string.IsNullOrEmpty(source)) return null;
  105. var encoding = Encoding.UTF8;
  106. byte[] keyStr = encoding.GetBytes(keyVal);
  107. HMACSHA512 hmacSha512 = new HMACSHA512(keyStr);
  108. return HashAlgorithmBase(hmacSha512, source, encoding);
  109. }
  110. /// <summary>
  111. /// HmacMd5 加密
  112. /// </summary>
  113. public static string HmacMd5(this string source, string keyVal)
  114. {
  115. if (string.IsNullOrEmpty(source)) return null;
  116. var encoding = Encoding.UTF8;
  117. byte[] keyStr = encoding.GetBytes(keyVal);
  118. HMACMD5 hmacMd5 = new HMACMD5(keyStr);
  119. return HashAlgorithmBase(hmacMd5, source, encoding);
  120. }
  121. /// <summary>
  122. /// HmacRipeMd160 加密
  123. /// </summary>
  124. public static string HmacRipeMd160(this string source, string keyVal)
  125. {
  126. if (string.IsNullOrEmpty(source)) return null;
  127. var encoding = Encoding.UTF8;
  128. byte[] keyStr = encoding.GetBytes(keyVal);
  129. HMACRIPEMD160 hmacRipeMd160 = new HMACRIPEMD160(keyStr);
  130. return HashAlgorithmBase(hmacRipeMd160, source, encoding);
  131. }
  132. #endregion
  133. #region AES 加密解密
  134. /// <summary>
  135. /// AES加密
  136. /// </summary>
  137. /// <param name="source">待加密字段</param>
  138. /// <param name="keyVal">密钥值</param>
  139. /// <param name="ivVal">加密辅助向量</param>
  140. /// <returns></returns>
  141. public static string AesStr(this string source, string keyVal, string ivVal)
  142. {
  143. var encoding = Encoding.UTF8;
  144. byte[] btKey = keyVal.FormatByte(encoding);
  145. byte[] btIv = ivVal.FormatByte(encoding);
  146. byte[] byteArray = encoding.GetBytes(source);
  147. string encrypt;
  148. Rijndael aes = Rijndael.Create();
  149. using (MemoryStream mStream = new MemoryStream())
  150. {
  151. using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(btKey, btIv), CryptoStreamMode.Write))
  152. {
  153. cStream.Write(byteArray, 0, byteArray.Length);
  154. cStream.FlushFinalBlock();
  155. encrypt = Convert.ToBase64String(mStream.ToArray());
  156. }
  157. }
  158. aes.Clear();
  159. return encrypt;
  160. }
  161. /// <summary>
  162. /// AES解密
  163. /// </summary>
  164. /// <param name="source">待加密字段</param>
  165. /// <param name="keyVal">密钥值</param>
  166. /// <param name="ivVal">加密辅助向量</param>
  167. /// <returns></returns>
  168. public static string UnAesStr(this string source, string keyVal, string ivVal)
  169. {
  170. var encoding = Encoding.UTF8;
  171. byte[] btKey = keyVal.FormatByte(encoding);
  172. byte[] btIv = ivVal.FormatByte(encoding);
  173. byte[] byteArray = Convert.FromBase64String(source);
  174. string decrypt;
  175. Rijndael aes = Rijndael.Create();
  176. using (MemoryStream mStream = new MemoryStream())
  177. {
  178. using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(btKey, btIv), CryptoStreamMode.Write))
  179. {
  180. cStream.Write(byteArray, 0, byteArray.Length);
  181. cStream.FlushFinalBlock();
  182. decrypt = encoding.GetString(mStream.ToArray());
  183. }
  184. }
  185. aes.Clear();
  186. return decrypt;
  187. }
  188. /// <summary>
  189. /// AES Byte类型 加密
  190. /// </summary>
  191. /// <param name="data">待加密明文</param>
  192. /// <param name="keyVal">密钥值</param>
  193. /// <param name="ivVal">加密辅助向量</param>
  194. /// <returns></returns>
  195. public static byte[] AesByte(this byte[] data, string keyVal, string ivVal)
  196. {
  197. byte[] bKey = new byte[32];
  198. Array.Copy(Encoding.UTF8.GetBytes(keyVal.PadRight(bKey.Length)), bKey, bKey.Length);
  199. byte[] bVector = new byte[16];
  200. Array.Copy(Encoding.UTF8.GetBytes(ivVal.PadRight(bVector.Length)), bVector, bVector.Length);
  201. byte[] cryptograph;
  202. Rijndael aes = Rijndael.Create();
  203. try
  204. {
  205. using (MemoryStream mStream = new MemoryStream())
  206. {
  207. using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(bKey, bVector), CryptoStreamMode.Write))
  208. {
  209. cStream.Write(data, 0, data.Length);
  210. cStream.FlushFinalBlock();
  211. cryptograph = mStream.ToArray();
  212. }
  213. }
  214. }
  215. catch
  216. {
  217. cryptograph = null;
  218. }
  219. return cryptograph;
  220. }
  221. /// <summary>
  222. /// AES Byte类型 解密
  223. /// </summary>
  224. /// <param name="data">待解密明文</param>
  225. /// <param name="keyVal">密钥值</param>
  226. /// <param name="ivVal">加密辅助向量</param>
  227. /// <returns></returns>
  228. public static byte[] UnAesByte(this byte[] data, string keyVal, string ivVal)
  229. {
  230. byte[] bKey = new byte[32];
  231. Array.Copy(Encoding.UTF8.GetBytes(keyVal.PadRight(bKey.Length)), bKey, bKey.Length);
  232. byte[] bVector = new byte[16];
  233. Array.Copy(Encoding.UTF8.GetBytes(ivVal.PadRight(bVector.Length)), bVector, bVector.Length);
  234. byte[] original;
  235. Rijndael aes = Rijndael.Create();
  236. try
  237. {
  238. using (MemoryStream mStream = new MemoryStream(data))
  239. {
  240. using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(bKey, bVector), CryptoStreamMode.Read))
  241. {
  242. using (MemoryStream originalMemory = new MemoryStream())
  243. {
  244. byte[] buffer = new byte[1024];
  245. int readBytes;
  246. while ((readBytes = cStream.Read(buffer, 0, buffer.Length)) > 0)
  247. {
  248. originalMemory.Write(buffer, 0, readBytes);
  249. }
  250. original = originalMemory.ToArray();
  251. }
  252. }
  253. }
  254. }
  255. catch
  256. {
  257. original = null;
  258. }
  259. return original;
  260. }
  261. #endregion
  262. #region RSA 加密解密
  263. //密钥对,请配合密钥生成工具使用『 http://download.csdn.net/detail/downiis6/9464639 』
  264. private const string PublicRsaKey = @"<RSAKeyValue>
  265. <Modulus>8Yvf/LjXRhCuOREk2CuSYvbD/RadwJ4sjHREIpQVKwkTlG3BtRgpnaMcoeLAesmwvpBWnqK4hBkYLxhRj+NEKnlGrJ+LkNMnZr0/4CMuulZFAnx7iQYaSq7Eh7kBKGLofc05CjZguYpnPNxHIv4VNx+a9tIh+hnhjrmkJLUm3l0=</Modulus>
  266. <Exponent>AQAB</Exponent>
  267. </RSAKeyValue>";
  268. private const string PrivateRsaKey = @"<RSAKeyValue>
  269. <Modulus>8Yvf/LjXRhCuOREk2CuSYvbD/RadwJ4sjHREIpQVKwkTlG3BtRgpnaMcoeLAesmwvpBWnqK4hBkYLxhRj+NEKnlGrJ+LkNMnZr0/4CMuulZFAnx7iQYaSq7Eh7kBKGLofc05CjZguYpnPNxHIv4VNx+a9tIh+hnhjrmkJLUm3l0=</Modulus>
  270. <Exponent>AQAB</Exponent>
  271. <P>/xAaa/4dtDxcEAk5koSZBPjuxqvKJikpwLA1nCm3xxAUMDVxSwQyr+SHFaCnBN9kqaNkQCY6kDCfJXFWPOj0Bw==</P>
  272. <Q>8m8PFVA4sO0oEKMVQxt+ivDTHFuk/W154UL3IgC9Y6bzlvYewXZSzZHmxZXXM1lFtwoYG/k+focXBITsiJepew==</Q>
  273. <DP>ONVSvdt6rO2CKgSUMoSfQA9jzRr8STKE3i2lVG2rSIzZosBVxTxjOvQ18WjBroFEgdQpg23BQN3EqGgvqhTSQw==</DP>
  274. <DQ>gfp7SsEM9AbioTDemHEoQlPly+FyrxE/9D8UAt4ErGX5WamxSaYntOGRqcOxcm1djEpULMNP90R0Wc7uhjlR+w==</DQ>
  275. <InverseQ>C0eBsp2iMOxWwKo+EzkHOP0H+YOitUVgjekGXmSt9a3TvikQNaJ5ATlqKsZaMGsnB6UIHei+kUaCusVX0HgQ2A==</InverseQ>
  276. <D>tPYxEfo9Nb3LeO+SJe3G1yO+w37NIwCdqYB1h15f2YUMSThNVmpKy1HnYpUp1RQDuVETw/duu3C9gJL8kAsZBjBrVZ0zC/JZsgvSNprfUK3Asc4FgFsGfQGKW1nvvgdMbvqr4ClB0R8czkki+f9Oc5ea/RMqXxlI+XjzMYDEknU=</D>
  277. </RSAKeyValue>";
  278. /// <summary>
  279. /// RSA 加密
  280. /// </summary>
  281. public static string Rsa(this string source)
  282. {
  283. RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
  284. rsa.FromXmlString(PublicRsaKey);
  285. var cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(source), true);
  286. return Convert.ToBase64String(cipherbytes);
  287. }
  288. /// <summary>
  289. /// RSA解密
  290. /// </summary>
  291. public static string UnRsa(this string source)
  292. {
  293. RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
  294. rsa.FromXmlString(PrivateRsaKey);
  295. var cipherbytes = rsa.Decrypt(Convert.FromBase64String(source), true);
  296. return Encoding.UTF8.GetString(cipherbytes);
  297. }
  298. #endregion
  299. #region DES 加密解密
  300. /// <summary>
  301. /// DES 加密
  302. /// </summary>
  303. public static string Des(this string source, string keyVal, string ivVal)
  304. {
  305. try
  306. {
  307. byte[] data = Encoding.UTF8.GetBytes(source);
  308. var des = new DESCryptoServiceProvider { Key = Encoding.ASCII.GetBytes(keyVal.Length > 8 ? keyVal.Substring(0, 8) : keyVal), IV = Encoding.ASCII.GetBytes(ivVal.Length > 8 ? ivVal.Substring(0, 8) : ivVal) };
  309. var desencrypt = des.CreateEncryptor();
  310. byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
  311. return BitConverter.ToString(result);
  312. }
  313. catch { return "转换出错!"; }
  314. }
  315. /// <summary>
  316. /// DES 解密
  317. /// </summary>
  318. public static string UnDes(this string source, string keyVal, string ivVal)
  319. {
  320. try
  321. {
  322. string[] sInput = source.Split("-".ToCharArray());
  323. byte[] data = new byte[sInput.Length];
  324. for (int i = 0; i < sInput.Length; i++)
  325. {
  326. data[i] = byte.Parse(sInput[i], NumberStyles.HexNumber);
  327. }
  328. var des = new DESCryptoServiceProvider { Key = Encoding.ASCII.GetBytes(keyVal.Length > 8 ? keyVal.Substring(0, 8) : keyVal), IV = Encoding.ASCII.GetBytes(ivVal.Length > 8 ? ivVal.Substring(0, 8) : ivVal) };
  329. var desencrypt = des.CreateDecryptor();
  330. byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
  331. return Encoding.UTF8.GetString(result);
  332. }
  333. catch { return "解密出错!"; }
  334. }
  335. #endregion
  336. #region TripleDES 加密解密
  337. /// <summary>
  338. /// DES3 加密
  339. /// </summary>
  340. public static string Des3(this string source, string keyVal)
  341. {
  342. try
  343. {
  344. TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider
  345. {
  346. Key = keyVal.FormatByte(Encoding.UTF8),
  347. Mode = CipherMode.ECB,
  348. Padding = PaddingMode.PKCS7
  349. };
  350. using (MemoryStream ms = new MemoryStream())
  351. {
  352. byte[] btArray = Encoding.UTF8.GetBytes(source);
  353. try
  354. {
  355. using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
  356. {
  357. cs.Write(btArray, 0, btArray.Length);
  358. cs.FlushFinalBlock();
  359. }
  360. return ms.ToArray().Bytes2Str();
  361. }
  362. catch { return source; }
  363. }
  364. }
  365. catch
  366. {
  367. return "TripleDES加密出现错误";
  368. }
  369. }
  370. /// <summary>
  371. /// DES3 解密
  372. /// </summary>
  373. public static string UnDes3(this string source, string keyVal)
  374. {
  375. try
  376. {
  377. byte[] byArray = source.Str2Bytes();
  378. TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider
  379. {
  380. Key = keyVal.FormatByte(Encoding.UTF8),
  381. Mode = CipherMode.ECB,
  382. Padding = PaddingMode.PKCS7
  383. };
  384. using (MemoryStream ms = new MemoryStream())
  385. {
  386. using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
  387. {
  388. cs.Write(byArray, 0, byArray.Length);
  389. cs.FlushFinalBlock();
  390. cs.Close();
  391. ms.Close();
  392. return Encoding.UTF8.GetString(ms.ToArray());
  393. }
  394. }
  395. }
  396. catch
  397. {
  398. return "TripleDES解密出现错误";
  399. }
  400. }
  401. #endregion
  402. #region BASE64 加密解密
  403. /// <summary>
  404. /// BASE64 加密
  405. /// </summary>
  406. /// <param name="source">待加密字段</param>
  407. /// <returns></returns>
  408. public static string Base64(this string source)
  409. {
  410. var btArray = Encoding.UTF8.GetBytes(source);
  411. return Convert.ToBase64String(btArray, 0, btArray.Length);
  412. }
  413. /// <summary>
  414. /// BASE64 解密
  415. /// </summary>
  416. /// <param name="source">待解密字段</param>
  417. /// <returns></returns>
  418. public static string UnBase64(this string source)
  419. {
  420. var btArray = Convert.FromBase64String(source);
  421. return Encoding.UTF8.GetString(btArray);
  422. }
  423. #endregion
  424. #region 内部方法
  425. /// <summary>
  426. /// 转成数组
  427. /// </summary>
  428. private static byte[] Str2Bytes(this string source)
  429. {
  430. source = source.Replace(" ", "");
  431. byte[] buffer = new byte[source.Length / 2];
  432. for (int i = 0; i < source.Length; i += 2) buffer[i / 2] = Convert.ToByte(source.Substring(i, 2), 16);
  433. return buffer;
  434. }
  435. /// <summary>
  436. /// 转换成字符串
  437. /// </summary>
  438. private static string Bytes2Str(this IEnumerable<byte> source, string formatStr = "{0:X2}")
  439. {
  440. StringBuilder pwd = new StringBuilder();
  441. foreach (byte btStr in source) { pwd.AppendFormat(formatStr, btStr); }
  442. return pwd.ToString();
  443. }
  444. private static byte[] FormatByte(this string strVal, Encoding encoding)
  445. {
  446. return encoding.GetBytes(strVal.Base64().Substring(0, 16).ToUpper());
  447. }
  448. /// <summary>
  449. /// HashAlgorithm 加密统一方法
  450. /// </summary>
  451. private static string HashAlgorithmBase(HashAlgorithm hashAlgorithmObj, string source, Encoding encoding)
  452. {
  453. byte[] btStr = encoding.GetBytes(source);
  454. byte[] hashStr = hashAlgorithmObj.ComputeHash(btStr);
  455. return hashStr.Bytes2Str();
  456. }
  457. #endregion
  458. }
  459. }

Program.cs代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace Test
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. string plainText = "这是一条被和谐的消息!";
  12. //加密明文,获得密文
  13. string EncryptText= Utils.PassWordHelper.Rsa(plainText);
  14. Console.WriteLine(EncryptText);
  15. //解密密文,获得明文
  16. string DecryptText = Utils.PassWordHelper.UnRsa(EncryptText);
  17. Console.WriteLine(DecryptText);
  18. Console.ReadKey();
  19. }
  20. }
  21. }

运行结果如图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

人气教程排行