-
Notifications
You must be signed in to change notification settings - Fork 41
/
Copy pathDesUtil.cs
138 lines (127 loc) · 5.82 KB
/
DesUtil.cs
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
namespace EasyTool.CodeCategory
{
/// <summary>
/// DES工具类
/// </summary>
public static class DesUtil
{
/// <summary>
/// des 加密
/// </summary>
/// <param name="str">待加密字符串</param>
/// <param name="sk">秘钥</param>
/// <param name="cipher"></param>
/// <param name="padding"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string Encrypt(string str, string sk, CipherMode cipher = CipherMode.ECB, PaddingMode padding = PaddingMode.PKCS7, Encoding? encoding = null)
{
if (string.IsNullOrWhiteSpace(str)) return string.Empty;
if (!IsLegalSize(sk)) throw new ArgumentException("不合规的秘钥,请确认秘钥为8位的字符");
encoding ??= Encoding.UTF8;
byte[] keyBytes = encoding.GetBytes(sk).ToArray();
byte[] toEncrypt = encoding.GetBytes(str);
var des = DES.Create();
des.Mode = cipher;
des.Padding = padding;
des.Key = keyBytes;
des.IV = keyBytes;
ICryptoTransform cTransform = des.CreateEncryptor();
var resultArray = cTransform.TransformFinalBlock(toEncrypt, 0, toEncrypt.Length);
return Convert.ToBase64String(resultArray);
}
/// <summary>
/// Des 解密
/// </summary>
/// <param name="str">待解密字符串</param>
/// <param name="sk">秘钥</param>
/// <param name="cipher"></param>
/// <param name="padding"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string Decrypt(string str, string sk, CipherMode cipher = CipherMode.ECB, PaddingMode padding = PaddingMode.PKCS7, Encoding? encoding = null)
{
if (string.IsNullOrWhiteSpace(str)) return string.Empty;
if (!IsLegalSize(sk)) throw new ArgumentException("不合规的秘钥,请确认秘钥为8位的字符");
encoding ??= Encoding.UTF8;
byte[] keyBytes = encoding.GetBytes(sk).ToArray();
byte[] toDecrypt = Convert.FromBase64String(str);
var des = DES.Create();
des.Mode = cipher;
des.Padding = padding;
des.Key = keyBytes;
des.IV = keyBytes;
ICryptoTransform cTransform = des.CreateDecryptor();
var resultArray = cTransform.TransformFinalBlock(toDecrypt, 0, toDecrypt.Length);
return encoding.GetString(resultArray);
}
/// <summary>
/// des 加密
/// </summary>
/// <param name="str">待加密字符串</param>
/// <param name="sk">秘钥</param>
/// <param name="iv">向量Iv</param>
/// <param name="cipher">默认ECB</param>
/// <param name="padding">默认PKCS7</param>
/// <param name="encoding">默认UTF8</param>
/// <returns></returns>
/// <exception cref="ArgumentException"></exception>
public static string Encrypt(string str, string sk,string iv, CipherMode cipher = CipherMode.ECB, PaddingMode padding = PaddingMode.PKCS7, Encoding? encoding = null)
{
if (string.IsNullOrWhiteSpace(str)) return string.Empty;
if (!IsLegalSize(sk)) throw new ArgumentException("不合规的秘钥,请确认秘钥为8位的字符");
if (!IsLegalSize(iv)) throw new ArgumentException("不合规的IV,请确认IV为8位的字符");
encoding ??= Encoding.UTF8;
byte[] keyBytes = encoding.GetBytes(sk).ToArray();
byte[] toEncrypt = encoding.GetBytes(str);
var des = DES.Create();
des.Mode = cipher;
des.Padding = padding;
des.Key = keyBytes;
des.IV = keyBytes;
ICryptoTransform cTransform = des.CreateEncryptor();
var resultArray = cTransform.TransformFinalBlock(toEncrypt, 0, toEncrypt.Length);
return Convert.ToBase64String(resultArray);
}
/// <summary>
/// Des 解密
/// </summary>
/// <param name="str">待解密字符串</param>
/// <param name="sk">秘钥</param>
/// <param name="iv">向量Iv</param>
/// <param name="cipher">默认ECB</param>
/// <param name="padding">默认PKCS7</param>
/// <param name="encoding">默认UTF8</param>
/// <returns></returns>
/// <exception cref="ArgumentException"></exception>
public static string Decrypt(string str, string sk, string iv, CipherMode cipher = CipherMode.ECB, PaddingMode padding = PaddingMode.PKCS7, Encoding? encoding = null)
{
if (string.IsNullOrWhiteSpace(str)) return string.Empty;
if (!IsLegalSize(sk)) throw new ArgumentException("不合规的秘钥,请确认秘钥为8位的字符");
if (!IsLegalSize(iv)) throw new ArgumentException("不合规的IV,请确认IV为8位的字符");
encoding ??= Encoding.UTF8;
byte[] keyBytes = encoding.GetBytes(sk).ToArray();
byte[] toDecrypt = Convert.FromBase64String(str);
var des = DES.Create();
des.Mode = cipher;
des.Padding = padding;
des.Key = keyBytes;
des.IV = keyBytes;
ICryptoTransform cTransform = des.CreateDecryptor();
var resultArray = cTransform.TransformFinalBlock(toDecrypt, 0, toDecrypt.Length);
return encoding.GetString(resultArray);
}
private static bool IsLegalSize(string sk)
{
if (!string.IsNullOrEmpty(sk) && sk.Length == 8)
return true;
return false;
}
}
}