1
第一种:
2
using
System;
3
using
System.Text;
4
using
System.Security.Cryptography;
5
using
System.IO;
6
7
///
<summary>
8
///
Summary description for EncryptAndDecrypt
9
///
</summary>
10
public
class
EncryptAndDecrypt
11
{
12
//
默认密钥向量
13
private
static
byte
[] Keys
=
{
0x12
,
0x34
,
0x56
,
0x78
,
0x90
,
0xAB
,
0xCD
,
0xEF
};
14
/**/
///
<summary>
15
///
DES加密字符串
16
///
</summary>
17
///
<param name="encryptString">
待加密的字符串
</param>
18
///
<param name="encryptKey">
加密密钥,要求为8位
</param>
19
///
<returns>
加密成功返回加密后的字符串,失败返回源串
</returns>
20
public
static
string
EncryptDES(
string
encryptString,
string
encryptKey)
21
{
22
try
23
{
24
byte
[] rgbKey
=
Encoding.UTF8.GetBytes(encryptKey.Substring(
0
,
8
));
25
byte
[] rgbIV
=
Keys;
26
byte
[] inputByteArray
=
Encoding.UTF8.GetBytes(encryptString);
27
DESCryptoServiceProvider dCSP
=
new
DESCryptoServiceProvider();
28
MemoryStream mStream
=
new
MemoryStream();
29
CryptoStream cStream
=
new
CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
30
cStream.Write(inputByteArray,
0
, inputByteArray.Length);
31
cStream.FlushFinalBlock();
32
return
Convert.ToBase64String(mStream.ToArray());
33
}
34
catch
35
{
36
return
encryptString;
37
}
38
}
39
40
/**/
///
<summary>
41
///
DES解密字符串
42
///
</summary>
43
///
<param name="decryptString">
待解密的字符串
</param>
44
///
<param name="decryptKey">
解密密钥,要求为8位,和加密密钥相同
</param>
45
///
<returns>
解密成功返回解密后的字符串,失败返源串
</returns>
46
public
static
string
DecryptDES(
string
decryptString,
string
decryptKey)
47
{
48
try
49
{
50
byte
[] rgbKey
=
Encoding.UTF8.GetBytes(decryptKey);
51
byte
[] rgbIV
=
Keys;
52
byte
[] inputByteArray
=
Convert.FromBase64String(decryptString);
53
DESCryptoServiceProvider DCSP
=
new
DESCryptoServiceProvider();
54
MemoryStream mStream
=
new
MemoryStream();
55
CryptoStream cStream
=
new
CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
56
cStream.Write(inputByteArray,
0
, inputByteArray.Length);
57
cStream.FlushFinalBlock();
58
return
Encoding.UTF8.GetString(mStream.ToArray());
59
}
60
catch
61
{
62
return
decryptString;
63
}
64
}
65
}
66
第二种:
67
68
//
名称空间
69
using
System;
70
using
System.Security.Cryptography;
71
using
System.IO;
72
using
System.Text;
73
74
///
<summary>
75
///
Summary description for Encryption
76
///
</summary>
77
public
class
Encryption
78
{
79
///
<summary>
80
///
Default Key
81
///
</summary>
82
public
const
string
Key
=
"
bmc.1001
"
;
83
///
<summary>
84
///
Initial
85
///
</summary>
86
public
Encryption()
87
{
88
///
89
}
90
///
<summary>
91
///
加密方法
92
///
</summary>
93
///
<param name="pToEncrypt"></param>
94
///
<param name="sKey"></param>
95
///
<returns></returns>
96
public
string
Encrypt(
string
pToEncrypt,
string
sKey)
97
{
98
DESCryptoServiceProvider des
=
new
DESCryptoServiceProvider();
99
//
把字符串放到byte数组中
100
//
原来使用的UTF8编码,我改成Unicode编码了,不行
101
byte
[] inputByteArray
=
Encoding.Default.GetBytes(pToEncrypt);
102
//
byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);
103
104
//
建立加密对象的密钥和偏移量
105
//
原文使用ASCIIEncoding.ASCII方法的GetBytes方法
106
//
使得输入密码必须输入英文文本
107
des.Key
=
ASCIIEncoding.ASCII.GetBytes(sKey);
108
des.IV
=
ASCIIEncoding.ASCII.GetBytes(sKey);
109
//
创建其支持存储区为内存的流
110
MemoryStream ms
=
new
MemoryStream();
111
//
将数据流链接到加密转换的流
112
CryptoStream cs
=
new
CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
113
//
Write the byte array into the crypto stream
114
//
(It will end up in the memory stream)
115
cs.Write(inputByteArray,
0
, inputByteArray.Length);
116
//
用缓冲区的当前状态更新基础数据源或储存库,随后清除缓冲区
117
cs.FlushFinalBlock();
118
//
Get the data back from the memory stream, and into a string
119
byte
[] EncryptData
=
(
byte
[])ms.ToArray();
120
return
System.Convert.ToBase64String(EncryptData,
0
, EncryptData.Length);
121
}
122
///
<summary>
123
///
解密方法
124
///
</summary>
125
///
<param name="pToDecrypt"></param>
126
///
<param name="sKey"></param>
127
///
<returns></returns>
128
public
string
Decrypt(
string
pToDecrypt,
string
sKey)
129
{
130
DESCryptoServiceProvider des
=
new
DESCryptoServiceProvider();
131
//
Put the input string into the byte array
132
byte
[] inputByteArray
=
Convert.FromBase64String(pToDecrypt);
133
134
//
建立加密对象的密钥和偏移量,此值重要,不能修改
135
des.Key
=
ASCIIEncoding.ASCII.GetBytes(sKey);
136
des.IV
=
ASCIIEncoding.ASCII.GetBytes(sKey);
137
MemoryStream ms
=
new
MemoryStream();
138
CryptoStream cs
=
new
CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
139
//
Flush the data through the crypto stream into the memory stream
140
cs.Write(inputByteArray,
0
, inputByteArray.Length);
141
cs.FlushFinalBlock();
142
return
System.Text.Encoding.Default.GetString(ms.ToArray());
143
}
144
}
145