加密解密
2009-06-05 11:42
211 查看
开发中需要一个加密解密的双向过程
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
设置、获取Key、IV
#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
}
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
设置、获取Key、IV
#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
}
相关文章推荐
- Android 加密解密
- stm8 des/3des加密解密
- RSA加密解密及RSA签名和验证
- Base64加密解密
- Java AES加密解密示例
- 简单的加密,解密程序
- Android RSA加密解密,用于和服务器交互时的请求
- java的加密与解密
- 加密解密(四)--Java中的Hash算法
- Base64 加密 解密
- openssl的rsa加密解密在js的实现
- 一个五层加密过的表白恢复密码解密的过程
- java EJB 加密与解密原理的一个例子
- 加密解密以及数字证书
- javascript将url中的参数加密解密功能
- 字符串自定义加密解密 方法
- java 加密解密
- 加密和解密技术应用
- linux配置wireshark对TLS加密的数据进行解密
- 完成了lua文件的加密解密