AESHelper.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Security.Cryptography;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace TEAMModelOS.SDK
  8. {
  9. public class AESHelper
  10. {
  11. public static string Decryptor(string TextToDecrypt,string strKey,string strIV)
  12. {
  13. byte[] EncryptedBytes = Convert.FromBase64String(TextToDecrypt);
  14. //Setup the AES provider for decrypting.
  15. Aes aesProvider = Aes.Create();
  16. //aesProvider.Key = System.Text.Encoding.ASCII.GetBytes(strKey);
  17. //aesProvider.IV = System.Text.Encoding.ASCII.GetBytes(strIV);
  18. aesProvider.BlockSize = 128;
  19. aesProvider.KeySize = 256;
  20. //My key and iv that i have used in openssl
  21. aesProvider.Key = System.Text.Encoding.UTF8.GetBytes(strKey);
  22. aesProvider.IV = System.Text.Encoding.UTF8.GetBytes(strIV);
  23. aesProvider.Padding = PaddingMode.PKCS7;
  24. aesProvider.Mode = CipherMode.CBC;
  25. ICryptoTransform cryptoTransform = aesProvider.CreateDecryptor(aesProvider.Key, aesProvider.IV);
  26. byte[] DecryptedBytes = cryptoTransform.TransformFinalBlock(EncryptedBytes, 0, EncryptedBytes.Length);
  27. return System.Text.Encoding.UTF8.GetString(DecryptedBytes);
  28. }
  29. public static string Encryptor(string TextToEncrypt, string strKey, string strIV)
  30. {
  31. //Turn the plaintext into a byte array.
  32. byte[] PlainTextBytes = System.Text.ASCIIEncoding.UTF8.GetBytes(TextToEncrypt);
  33. //Setup the AES providor for our purposes.
  34. Aes aesProvider = Aes.Create();
  35. aesProvider.BlockSize = 128;
  36. aesProvider.KeySize = 256;
  37. //My key and iv that i have used in openssl
  38. aesProvider.Key = System.Text.Encoding.UTF8.GetBytes(strKey);
  39. aesProvider.IV = System.Text.Encoding.UTF8.GetBytes(strIV);
  40. aesProvider.Padding = PaddingMode.PKCS7;
  41. aesProvider.Mode = CipherMode.CBC;
  42. ICryptoTransform cryptoTransform = aesProvider.CreateEncryptor(aesProvider.Key, aesProvider.IV);
  43. byte[] EncryptedBytes = cryptoTransform.TransformFinalBlock(PlainTextBytes, 0, PlainTextBytes.Length);
  44. return Convert.ToBase64String(EncryptedBytes);
  45. }
  46. /// <summary>
  47. /// 有密码的加密
  48. /// </summary>
  49. /// <param name="toEncrypt">加密字符</param>
  50. /// <param name="key">加密的密码</param>
  51. /// <returns></returns>
  52. public static string AESEncrypt(string toEncrypt, string key)
  53. {
  54. byte[] keyArray = hexStringTobyte(key);
  55. byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
  56. RijndaelManaged rDel = new RijndaelManaged();
  57. rDel.KeySize = 128;
  58. rDel.BlockSize = 128;
  59. rDel.Key = keyArray;
  60. rDel.Mode = CipherMode.ECB;
  61. rDel.Padding = PaddingMode.PKCS7;
  62. ICryptoTransform cTransform = rDel.CreateEncryptor();
  63. byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
  64. return byteToHexString(resultArray);
  65. }
  66. /// <summary>
  67. /// 解密
  68. /// </summary>
  69. /// <param name="toDecrypt">解密字符</param>
  70. /// <param name="key">加密的密码</param>
  71. /// <returns></returns>
  72. public static string AESDecrypt(string toDecrypt, string key)
  73. {
  74. if (string.IsNullOrWhiteSpace(toDecrypt))
  75. {
  76. return "";
  77. }
  78. else {
  79. byte[] keyArray = hexStringTobyte(key);
  80. byte[] dest = hexStringTobyte(toDecrypt);
  81. RijndaelManaged rDel = new();
  82. rDel.KeySize = 128;
  83. rDel.BlockSize = 128;
  84. rDel.Key = keyArray;
  85. rDel.Mode = CipherMode.ECB;
  86. rDel.Padding = PaddingMode.PKCS7;
  87. ICryptoTransform cTransform = rDel.CreateDecryptor();
  88. try
  89. {
  90. byte[] resultArray = cTransform.TransformFinalBlock(dest, 0, dest.Length);
  91. return UTF8Encoding.UTF8.GetString(resultArray);
  92. }
  93. catch (Exception ex)
  94. {
  95. return toDecrypt;
  96. }
  97. }
  98. }
  99. private static byte[] hexStringTobyte(String s)
  100. {
  101. if (string.IsNullOrEmpty(s)) return null;
  102. s = s.ToLower();
  103. int byteArrayLength = s.Length / 2;
  104. byte[] b = new byte[byteArrayLength];
  105. for (int i = 0; i < byteArrayLength; i++)
  106. {
  107. byte b0 = Convert.ToByte(s.Substring(i * 2, 2), 16);
  108. b[i] = b0;
  109. }
  110. return b;
  111. }
  112. public static string byteToHexString(byte[] t)
  113. {
  114. StringBuilder sb = new StringBuilder();
  115. for (int i = 0; i < t.Length; i++)
  116. {
  117. sb.Append(t[i].ToString("x").PadLeft(2, '0'));
  118. }
  119. return sb.ToString().ToUpper();
  120. }
  121. }
  122. }