wxr
2020-06-15 b8e94316e41eba72d927d5ca7d931b26139ee8ff
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
using System;
using System.Text;
using System.Security.Cryptography;
using System.IO;
 
namespace Shared.Encryption
{
    public  class DES
    {
        //<summary><![CDATA[字符串DES加密函数]]></summary>
        //<param name="str"><![CDATA[被加密字符串 ]]></param>
        //<param name="key"><![CDATA[密钥 ]]></param> 
        //<returns><![CDATA[加密后字符串,error开头表示错误]]></returns>   
        public static string Encode(string str, string key)
        {
            try
            {
                var provider = new DESCryptoServiceProvider();
                provider.Key = Encoding.ASCII.GetBytes(key.Substring(0, key.Length < 8 ? key.Length : 8));
                provider.IV = Encoding.ASCII.GetBytes(key.Substring(0, key.Length < 8 ? key.Length : 8));
                var bytes = Encoding.UTF8.GetBytes(str);
                using (var stream = new MemoryStream())
                {
                    var stream2 = new CryptoStream(stream, provider.CreateEncryptor(), CryptoStreamMode.Write);
                    stream2.Write(bytes, 0, bytes.Length);
                    stream2.FlushFinalBlock();
                    var builder = new StringBuilder();
                    foreach (byte num in stream.ToArray())
                    {
                        builder.AppendFormat("{0:X2}", num);
                    }
                    return builder.ToString();
                }
            }
            catch (Exception)
            {
                return "error:加密失败!";
            }
        }
 
        //<summary><![CDATA[字符串DES解密函数]]></summary>
        //<param name="str"><![CDATA[被解密字符串 ]]></param>
        //<param name="key"><![CDATA[密钥 ]]></param> 
        //<returns><![CDATA[解密后字符串,error开头是出错]]></returns>   
        public static string Decode(string str, string key)
        {
            try
            {
                var provider = new DESCryptoServiceProvider();
                // 密钥
                provider.Key = Encoding.ASCII.GetBytes(key.Substring(0, key.Length < 8 ? key.Length : 8));
                // 偏移量
                provider.IV = Encoding.ASCII.GetBytes(key.Substring(0, key.Length < 8 ? key.Length : 8));
                var buffer = new byte[str.Length / 2];
                for (int i = 0; i < (str.Length / 2); i++)
                {
                    int num2 = Convert.ToInt32(str.Substring(i * 2, 2), 0x10);
                    buffer[i] = (byte)num2;
                }
                using (var stream = new MemoryStream())
                {
                    var stream2 = new CryptoStream(stream, provider.CreateDecryptor(), CryptoStreamMode.Write);
                    stream2.Write(buffer, 0, buffer.Length);
                    stream2.FlushFinalBlock();
                    stream.Close();
                    return Encoding.UTF8.GetString(stream.ToArray());
                }
            }
            catch (Exception)
            { 
                return "error:解密失败!"; 
            }
        }
    }
}