aes.cs 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Security.Cryptography;
  5. using System.Text;
  6. namespace MOTINOVA_MC_Test
  7. {
  8. internal class aes
  9. {
  10. // 加密字符串并保存到文件
  11. public static void EncryptToFile(string plainText, string filePath, string key, string iv)
  12. {
  13. using (Aes aesAlg = Aes.Create())
  14. {
  15. aesAlg.Key = Encoding.UTF8.GetBytes(key); // 密钥(必须是 16、24 或 32 字节)
  16. aesAlg.IV = Encoding.UTF8.GetBytes(iv); // 初始化向量(IV,必须是 16 字节)
  17. using (FileStream fsEncrypt = new FileStream(filePath, FileMode.Create))
  18. using (CryptoStream csEncrypt = new CryptoStream(fsEncrypt, aesAlg.CreateEncryptor(), CryptoStreamMode.Write))
  19. using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
  20. {
  21. swEncrypt.Write(plainText);
  22. }
  23. }
  24. }
  25. // 从加密文件解密刺符传
  26. public static string DecryptFromFile(string filePath, string key, string iv)
  27. {
  28. using (Aes aesAlg = Aes.Create())
  29. {
  30. aesAlg.Key = Encoding.UTF8.GetBytes(key); // 密钥(必须是 16、24 或 32 字节)
  31. aesAlg.IV = Encoding.UTF8.GetBytes(iv); // 初始化向量(IV,必须是 16 字节)
  32. using (FileStream fsDecrypt = new FileStream(filePath, FileMode.Open))
  33. using (CryptoStream csDecrypt = new CryptoStream(fsDecrypt, aesAlg.CreateDecryptor(), CryptoStreamMode.Read))
  34. using (StreamReader srDecrypt = new StreamReader(csDecrypt))
  35. {
  36. return srDecrypt.ReadToEnd();
  37. }
  38. }
  39. }
  40. // 加密字符串
  41. public static string EncryptString(string plainText, string key, string iv)
  42. {
  43. byte[] array;
  44. using (Aes aesAlg = Aes.Create())
  45. {
  46. aesAlg.Key = Encoding.UTF8.GetBytes(key); // 密钥(必须是 16、24 或 32 字节)
  47. aesAlg.IV = Encoding.UTF8.GetBytes(iv); // 初始化向量(IV,必须是 16 字节)
  48. ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
  49. using (MemoryStream memoryStream = new MemoryStream())
  50. {
  51. using (CryptoStream cryptoStream = new CryptoStream((Stream)memoryStream, encryptor, CryptoStreamMode.Write))
  52. {
  53. using (StreamWriter streamWriter = new StreamWriter((Stream)cryptoStream))
  54. {
  55. streamWriter.Write(plainText);
  56. }
  57. array = memoryStream.ToArray();
  58. }
  59. }
  60. }
  61. return Convert.ToBase64String(array);
  62. }
  63. public static string DecryptString(string cipherText, string key, string iv)
  64. {
  65. byte[] buffer = Convert.FromBase64String(cipherText);
  66. using (Aes aesAlg = Aes.Create())
  67. {
  68. aesAlg.Key = Encoding.UTF8.GetBytes(key); // 密钥(必须是 16、24 或 32 字节)
  69. aesAlg.IV = Encoding.UTF8.GetBytes(iv); // 初始化向量(IV,必须是 16 字节)
  70. ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
  71. using (MemoryStream memoryStream = new MemoryStream(buffer))
  72. {
  73. using (CryptoStream cryptoStream = new CryptoStream((Stream)memoryStream, decryptor, CryptoStreamMode.Read))
  74. {
  75. using (StreamReader streamReader = new StreamReader((Stream)cryptoStream))
  76. {
  77. return streamReader.ReadToEnd();
  78. }
  79. }
  80. }
  81. }
  82. }
  83. }
  84. }