開發中需要一個加密解密的雙向過程
MD5等Hash類型的單向加密不能符合使用的要求
所以自己寫了一個類,當然還是調用 System.Security.Cryptography的方法
DESCryptoServiceProvider
加密過程
通過GetKey()、GetIV()方法產生和密鑰key、隨機變量IV
解密過程
用key、IV作爲參數 通過SetKey()、SetIV()給Sercurity類的Key和IV負值
key、IV都是byte[]
遇到的問題:string-〉byte[]的轉化
解決: Convert.FromBase64String(string s) 返回byte[]
1
using
System;
2
using
System.IO;
3
using
System.Text;
4
using
System.Security.Cryptography;
5
6
namespace
mySecurity
7
{
8
///
<summary>
9
///
MySecurity 的摘要說明。
10
///
</summary>
11
public
class
Security
12
{
13
private
SymmetricAlgorithm mCSP
=
new
DESCryptoServiceProvider();
14
15
//
private SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
16
17
///
<summary>
18
///
加密
19
///
</summary>
20
///
<param name="Value"></param>
21
///
<returns></returns>
22
public
string
EncryptString(
string
Value)
23
{
24
ICryptoTransform ct;
25
MemoryStream ms;
26
CryptoStream cs;
27
byte
[] byt;
28
29
ct
=
mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);
30
31
byt
=
Encoding.UTF8.GetBytes(Value);
32
33
ms
=
new
MemoryStream();
34
cs
=
new
CryptoStream(ms, ct, CryptoStreamMode.Write);
35
cs.Write(byt,
0
, byt.Length);
36
cs.FlushFinalBlock();
37
38
cs.Close();
39
40
return
Convert.ToBase64String(ms.ToArray());
41
}
42
43
///
<summary>
44
///
解密
45
///
</summary>
46
///
<param name="Value"></param>
47
///
<returns></returns>
48
public
string
DecryptString(
string
Value)
49
{
50
ICryptoTransform ct;
51
MemoryStream ms;
52
CryptoStream cs;
53
byte
[] byt;
54
55
ct
=
mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
56
57
byt
=
Convert.FromBase64String(Value);
58
59
ms
=
new
MemoryStream();
60
cs
=
new
CryptoStream(ms, ct, CryptoStreamMode.Write);
61
cs.Write(byt,
0
, byt.Length);
62
cs.FlushFinalBlock();
63
64
cs.Close();
65
66
return
Encoding.UTF8.GetString(ms.ToArray());
67
}
68
69
70
public
Security()
{}
71
72
#region
設置、獲取Key、IV
73
///
<summary>
74
///
獲取產生的Key值,加密過程之前需調用該方法
75
///
</summary>
76
///
<returns></returns>
77
public
string
GetKey()
78
{
79
mCSP.GenerateKey();
80
return
Convert.ToBase64String(mCSP.Key);
81
}
82
83
///
<summary>
84
///
獲取產生的隨機變量值,加密過程之前需調用該方法
85
///
</summary>
86
///
<returns></returns>
87
public
string
GetIV()
88
{
89
mCSP.GenerateIV();
90
return
Convert.ToBase64String(mCSP.IV);
91
}
92
93
///
<summary>
94
///
設置Key的值,解密過程之前需要調用
95
///
</summary>
96
///
<param name="key"></param>
97
///
<returns></returns>
98
public
string
SetKey(
string
key)
99
{
100
mCSP.Key
=
Convert.FromBase64String(key);
101
return
Convert.ToBase64String(mCSP.Key);
102
}
103
///
<summary>
104
///
設置隨機變量IV的值,解密過程之前需要調用
105
///
</summary>
106
///
<param name="IV"></param>
107
///
<returns></returns>
108
public
string
SetIV(
string
IV)
109
{
110
mCSP.IV
=
Convert.FromBase64String(IV);
111
return
Convert.ToBase64String(mCSP.IV);
112
}
113
#endregion
114
115
116
}
117
}