Blame view

netcore/src/Infrastructure/NCC/DataEncryption/Encryptions/DESCEncryption.cs 2.63 KB
de2bd2f9   “wangming”   项目初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
  using NCC.Dependency;
  using System;
  using System.IO;
  using System.Security.Cryptography;
  using System.Text;
  
  namespace NCC.DataEncryption
  {
      /// <summary>
      /// DESC 加解密
      /// </summary>
      [SuppressSniffer]
      public class DESCEncryption
      {
          /// <summary>
          /// 加密
          /// </summary>
          /// <param name="text">加密文本</param>
          /// <param name="skey">密钥</param>
          /// <param name="uppercase">是否输出大写加密,默认 false</param>
          /// <returns></returns>
          public static string Encrypt(string text, string skey, bool uppercase = false)
          {
              using var des = DES.Create();
              byte[] inputByteArray;
              inputByteArray = Encoding.Default.GetBytes(text);
  
              des.Key = Encoding.ASCII.GetBytes(MD5Encryption.Encrypt(skey, uppercase).Substring(0, 8));
              des.IV = Encoding.ASCII.GetBytes(MD5Encryption.Encrypt(skey, uppercase).Substring(0, 8));
  
              using var ms = new MemoryStream();
              using var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
  
              cs.Write(inputByteArray, 0, inputByteArray.Length);
              cs.FlushFinalBlock();
  
              var ret = new StringBuilder();
              foreach (var b in ms.ToArray())
              {
                  ret.AppendFormat("{0:X2}", b);
              }
  
              return ret.ToString();
          }
  
          /// <summary>
          /// 解密
          /// </summary>
          /// <param name="hash">加密后字符串</param>
          /// <param name="skey">密钥</param>
          /// <param name="uppercase">是否输出大写加密,默认 false</param>
          /// <returns></returns>
          public static string Decrypt(string hash, string skey, bool uppercase = false)
          {
              using var des = DES.Create();
              int len;
              len = hash.Length / 2;
              var inputByteArray = new byte[len];
              int x, i;
  
              for (x = 0; x < len; x++)
              {
                  i = Convert.ToInt32(hash.Substring(x * 2, 2), 16);
                  inputByteArray[x] = (byte)i;
              }
  
              des.Key = Encoding.ASCII.GetBytes(MD5Encryption.Encrypt(skey, uppercase).Substring(0, 8));
              des.IV = Encoding.ASCII.GetBytes(MD5Encryption.Encrypt(skey, uppercase).Substring(0, 8));
  
              using var ms = new MemoryStream();
              using var cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
  
              cs.Write(inputByteArray, 0, inputByteArray.Length);
              cs.FlushFinalBlock();
  
              return Encoding.Default.GetString(ms.ToArray());
          }
      }
  }