You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
2.3 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Security.Cryptography;
  5. using System.Text;
  6. namespace Apewer.Internals
  7. {
  8. internal class AesHelper
  9. {
  10. private static long AesSteam(ICryptoTransform argCT, Stream argInput, Stream argOutput)
  11. {
  12. long vcount = 0;
  13. var vcs = new CryptoStream(argOutput, argCT, CryptoStreamMode.Write);
  14. try
  15. {
  16. vcount = StreamHelper.Read(argInput, argOutput);
  17. vcs.FlushFinalBlock();
  18. }
  19. catch (Exception argException)
  20. {
  21. throw argException;
  22. }
  23. vcs.Dispose();
  24. return vcount;
  25. }
  26. /// <summary>对数据进行 AES 加密。</summary>
  27. public static byte[] AesEncrypt(byte[] argdata, byte[] argkey, byte[] argvector)
  28. {
  29. var vkey = (argkey == null) ? new byte[0] : argkey;
  30. RijndaelManaged vrm = new RijndaelManaged();
  31. vrm.KeySize = (argkey.Length <= 128) ? 128 : ((argkey.Length <= 192) ? 192 : 256);
  32. var viv = vrm.IV;
  33. var vr = Rijndael.Create();
  34. var vct = vr.CreateEncryptor(vkey, viv);
  35. var vinput = new MemoryStream(argdata);
  36. var voutput = new MemoryStream();
  37. AesSteam(vct, vinput, voutput);
  38. vinput.Dispose();
  39. var vresult = voutput.ToArray();
  40. voutput.Dispose();
  41. return vresult;
  42. }
  43. /// <summary>对数据进行 AES 解密。</summary>
  44. public static byte[] AesDecrypt(byte[] argdata, byte[] argkey, byte[] argvector)
  45. {
  46. var vkey = (argkey == null) ? new byte[0] : argkey;
  47. RijndaelManaged vrm = new RijndaelManaged();
  48. vrm.KeySize = (argkey.Length <= 128) ? 128 : ((argkey.Length <= 192) ? 192 : 256);
  49. var viv = vrm.IV;
  50. var vr = Rijndael.Create();
  51. var vct = vr.CreateDecryptor(vkey, viv);
  52. var vinput = new MemoryStream(argdata);
  53. var voutput = new MemoryStream();
  54. AesSteam(vct, vinput, voutput);
  55. vinput.Dispose();
  56. var vresult = voutput.ToArray();
  57. voutput.Dispose();
  58. return vresult;
  59. }
  60. }
  61. }