RSACryption.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. using System;
  2. using System.Security.Cryptography;
  3. using System.Text;
  4. namespace LJLib.Tools.DEncrypt
  5. {
  6. /// <summary>
  7. /// RSA加密解密及RSA签名和验证
  8. /// </summary>
  9. public static class RSACryption
  10. {
  11. #region RSA 加密解密
  12. #region RSA 的密钥产生
  13. /// <summary>
  14. /// RSA 的密钥产生 产生私钥 和公钥
  15. /// </summary>
  16. public static void RSAKey(out string privateKey, out string publicKey)
  17. {
  18. using (var rsa = new RSACryptoServiceProvider())
  19. {
  20. privateKey = rsa.ToXmlString(true);
  21. publicKey = rsa.ToXmlString(false);
  22. }
  23. }
  24. #endregion
  25. #region RSA的加密函数
  26. //##############################################################################
  27. //RSA 方式加密
  28. //说明KEY必须是XML的行式,返回的是字符串
  29. //在有一点需要说明!!该加密方式有 长度 限制的!!
  30. //##############################################################################
  31. //RSA的加密函数 string
  32. public static string RSAEncrypt(string publicKey, string source)
  33. {
  34. return Convert.ToBase64String(RSAEncrypt(publicKey, Encoding.UTF8.GetBytes(source)));
  35. }
  36. //RSA的加密函数 byte[]
  37. public static byte[] RSAEncrypt(string publicKey, byte[] source)
  38. {
  39. using (var rsa = new RSACryptoServiceProvider())
  40. {
  41. rsa.FromXmlString(publicKey);
  42. return rsa.Encrypt(source, false);
  43. }
  44. }
  45. #endregion
  46. #region RSA的解密函数
  47. //RSA的解密函数 string
  48. public static string RSADecrypt(string privateKey, string base64Str)
  49. {
  50. return Encoding.UTF8.GetString(RSADecrypt(privateKey, Convert.FromBase64String(base64Str)));
  51. }
  52. //RSA的解密函数 byte
  53. public static byte[] RSADecrypt(string privateKey, byte[] destData)
  54. {
  55. using (var rsa = new RSACryptoServiceProvider())
  56. {
  57. rsa.FromXmlString(privateKey);
  58. return rsa.Decrypt(destData, false);
  59. }
  60. }
  61. #endregion
  62. #endregion
  63. #region RSA数字签名
  64. #region RSA签名
  65. //RSA签名
  66. public static string SignData(string privateKey, string source)
  67. {
  68. return SignData(privateKey, Encoding.UTF8.GetBytes(source));
  69. }
  70. //RSA签名
  71. public static string SignData(string privateKey, byte[] source)
  72. {
  73. using (var rsa = new RSACryptoServiceProvider())
  74. {
  75. rsa.FromXmlString(privateKey);
  76. var RSAFormatter = new RSAPKCS1SignatureFormatter(rsa);
  77. //RSAFormatter.SetHashAlgorithm("MD5");
  78. //var md5 = new LJLib.Tools.Encry.MD5();
  79. ////执行签名
  80. //return Convert.ToBase64String(RSAFormatter.CreateSignature(md5.ComputeHash(source)));
  81. RSAFormatter.SetHashAlgorithm("SHA256");
  82. var sha = new LJLib.Tools.Encry.sha256();
  83. //执行签名
  84. return Convert.ToBase64String(RSAFormatter.CreateSignature(sha.Getsha256(source)));
  85. }
  86. }
  87. #endregion
  88. #region RSA 签名验证
  89. public static bool Verify(string publicKey, string source, string signData)
  90. {
  91. return Verify(publicKey, Encoding.UTF8.GetBytes(source), signData);
  92. }
  93. public static bool Verify(string publicKey, byte[] source, string signData)
  94. {
  95. using (var rsa = new RSACryptoServiceProvider())
  96. {
  97. rsa.FromXmlString(publicKey);
  98. var RSADeformatter = new RSAPKCS1SignatureDeformatter(rsa);
  99. //RSADeformatter.SetHashAlgorithm("MD5");
  100. //var md5 = new LJLib.Tools.Encry.MD5();
  101. //return RSADeformatter.VerifySignature(md5.ComputeHash(source), Convert.FromBase64String(signData));
  102. RSADeformatter.SetHashAlgorithm("SHA256");
  103. var sha = new LJLib.Tools.Encry.sha256();
  104. return RSADeformatter.VerifySignature(sha.Getsha256(source), Convert.FromBase64String(signData));
  105. }
  106. }
  107. #endregion
  108. #endregion
  109. }
  110. }