#region
DES加密解密
///
<summary>
///
DES加密
///
</summary>
///
<param name="strSource">
待加密字串
</param>
///
<param name="key">
32位Key值
</param>
///
<returns>
加密后的字符串
</returns>
public
string
DESEncrypt(
string
strSource)
{
return
DESEncrypt(strSource, DESKey);
}
public
string
DESEncrypt(
string
strSource,
byte
[] key)
{
SymmetricAlgorithm sa
=
Rijndael.Create();
sa.Key
=
key;
sa.Mode
=
CipherMode.ECB;
sa.Padding
=
PaddingMode.Zeros;
MemoryStream ms
=
new
MemoryStream();
CryptoStream cs
=
new
CryptoStream(ms, sa.CreateEncryptor(), CryptoStreamMode.Write);
byte
[] byt
=
Encoding.Unicode.GetBytes(strSource);
cs.Write(byt,
0
, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return
Convert.ToBase64String(ms.ToArray());
}
///
<summary>
///
DES解密
///
</summary>
///
<param name="strSource">
待解密的字串
</param>
///
<param name="key">
32位Key值
</param>
///
<returns>
解密后的字符串
</returns>
public
string
DESDecrypt(
string
strSource)
{
return
DESDecrypt(strSource, DESKey);
}
public
string
DESDecrypt(
string
strSource,
byte
[] key)
{
SymmetricAlgorithm sa
=
Rijndael.Create();
sa.Key
=
key;
sa.Mode
=
CipherMode.ECB;
sa.Padding
=
PaddingMode.Zeros;
ICryptoTransform ct
=
sa.CreateDecryptor();
byte
[] byt
=
Convert.FromBase64String(strSource);
MemoryStream ms
=
new
MemoryStream(byt);
CryptoStream cs
=
new
CryptoStream(ms, ct, CryptoStreamMode.Read);
StreamReader sr
=
new
StreamReader(cs, Encoding.Unicode);
return
sr.ReadToEnd();
}
#endregion
#region
一个用hash实现的加密解密方法
///
<summary>
///
加密
///
</summary>
///
<param name="src"></param>
///
<returns></returns>
public
static
string
EncryptStrByHash(
string
src)
{
if
(src.Length
==
0
)
{
return
""
;
}
byte
[] HaKey
=
System.Text.Encoding.ASCII.GetBytes((src
+
"
Test
"
).ToCharArray());
byte
[] HaData
=
new
byte
[
20
];
HMACSHA1 Hmac
=
new
HMACSHA1(HaKey);
CryptoStream cs
=
new
CryptoStream(Stream.Null, Hmac, CryptoStreamMode.Write);
try
{
cs.Write(HaData,
0
, HaData.Length);
}
finally
{
cs.Close();
}
string
HaResult
=
System.Convert.ToBase64String(Hmac.Hash).Substring(
0
,
16
);
byte
[] RiKey
=
System.Text.Encoding.ASCII.GetBytes(HaResult.ToCharArray());
byte
[] RiDataBuf
=
System.Text.Encoding.ASCII.GetBytes(src.ToCharArray());
byte
[] EncodedBytes
=
{ };
MemoryStream ms
=
new
MemoryStream();
RijndaelManaged rv
=
new
RijndaelManaged();
cs
=
new
CryptoStream(ms, rv.CreateEncryptor(RiKey, RiKey), CryptoStreamMode.Write);
try
{
cs.Write(RiDataBuf,
0
, RiDataBuf.Length);
cs.FlushFinalBlock();
EncodedBytes
=
ms.ToArray();
}
finally
{
ms.Close();
cs.Close();
}
return
HaResult
+
System.Convert.ToBase64String(EncodedBytes);
}
///
<summary>
///
解密
///
</summary>
///
<param name="src"></param>
///
<returns></returns>
public
static
string
DecrypStrByHash(
string
src)
{
if
(src.Length
<
40
)
return
""
;
byte
[] SrcBytes
=
System.Convert.FromBase64String(src.Substring(
16
));
byte
[] RiKey
=
System.Text.Encoding.ASCII.GetBytes(src.Substring(
0
,
16
).ToCharArray());
byte
[] InitialText
=
new
byte
[SrcBytes.Length];
RijndaelManaged rv
=
new
RijndaelManaged();
MemoryStream ms
=
new
MemoryStream(SrcBytes);
CryptoStream cs
=
new
CryptoStream(ms, rv.CreateDecryptor(RiKey, RiKey), CryptoStreamMode.Read);
try
{
cs.Read(InitialText,
0
, InitialText.Length);
}
finally
{
ms.Close();
cs.Close();
}
System.Text.StringBuilder Result
=
new
System.Text.StringBuilder();
for
(
int
i
=
0
; i
<
InitialText.Length;
++
i)
if
(InitialText[i]
>
0
) Result.Append((
char
)InitialText[i]);
return
Result.ToString();
}
///
<summary>
///
对加密后的密文重新编码,如果密文长>16,则去掉前16个字符,如果长度小于16,返回空字符串
///
</summary>
///
<param name="s"></param>
///
<returns></returns>
public
string
ReEncryptStrByHash(
string
s)
{
string
e
=
Encrypt.EncryptStrByHash(s);
return
((e.Length
>
16
)
?
e.Substring(
16
) :
""
);
}
#endregion
#region
Md5加密,生成16位或32位,生成的密文都是大写
public
static
string
Md5To16(
string
str)
{
MD5CryptoServiceProvider md5
=
new
MD5CryptoServiceProvider();
string
t2
=
BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(str)),
4
,
8
);
t2
=
t2.Replace(
"
-
"
,
""
);
return
t2;
}
///
/
<summary>
///
MD5 32位加密
///
</summary>
///
<param name="str"></param>
///
<returns></returns>
public
static
string
Md5To32(
string
str)
{
string
pwd
=
""
;
MD5 md5
=
MD5.Create();
byte
[] s
=
md5.ComputeHash(Encoding.UTF8.GetBytes(str));
for
(
int
i
=
0
; i
<
s.Length; i
++
)
{
pwd
=
pwd
+
s[i].ToString(
"
X
"
);
}
return
pwd;
}
#endregion
#region
3DES加密解密
public
string
Encrypt3DES(
string
str)
{
//
密钥
string
sKey
=
"
wyw308
"
;
//
//
矢量,可为空
string
sIV
=
"
scf521
"
;
//
//
构造对称算法
SymmetricAlgorithm mCSP
=
new
TripleDESCryptoServiceProvider();
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte
[] byt;
mCSP.Key
=
Convert.FromBase64String(sKey);
mCSP.IV
=
Convert.FromBase64String(sIV);
mCSP.Mode
=
System.Security.Cryptography.CipherMode.ECB;
mCSP.Padding
=
System.Security.Cryptography.PaddingMode.PKCS7;
ct
=
mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);
byt
=
Encoding.UTF8.GetBytes(str);
ms
=
new
MemoryStream();
cs
=
new
CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt,
0
, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return
Convert.ToBase64String(ms.ToArray());
}
///
<summary>
///
带指定密钥和矢量的3DES加密
///
</summary>
///
<param name="str"></param>
///
<param name="sKey"></param>
///
<param name="sIV"></param>
///
<returns></returns>
public
string
Encrypt3DES(
string
str,
string
sKey,
string
sIV)
{
SymmetricAlgorithm mCSP
=
new
TripleDESCryptoServiceProvider();
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte
[] byt;
mCSP.Key
=
Convert.FromBase64String(sKey);
mCSP.IV
=
Convert.FromBase64String(sIV);
mCSP.Mode
=
System.Security.Cryptography.CipherMode.ECB;
mCSP.Padding
=
System.Security.Cryptography.PaddingMode.PKCS7;
ct
=
mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);
byt
=
Encoding.UTF8.GetBytes(str);
ms
=
new
MemoryStream();
cs
=
new
CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt,
0
, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return
Convert.ToBase64String(ms.ToArray());
}
//
解密
public
string
Decrypt3DES(
string
Value)
{
string
sKey
=
"
wyw308
"
;
string
sIV
=
"
scf521
"
;
SymmetricAlgorithm mCSP
=
new
TripleDESCryptoServiceProvider();
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte
[] byt;
mCSP.Key
=
Convert.FromBase64String(sKey);
mCSP.IV
=
Convert.FromBase64String(sIV);
mCSP.Mode
=
System.Security.Cryptography.CipherMode.ECB;
mCSP.Padding
=
System.Security.Cryptography.PaddingMode.PKCS7;
ct
=
mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
byt
=
Convert.FromBase64String(Value);
ms
=
new
MemoryStream();
cs
=
new
CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt,
0
, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return
Encoding.UTF8.GetString(ms.ToArray());
}
///
<summary>
///
带指定密钥和矢量的3DES解密
///
</summary>
///
<param name="Value"></param>
///
<param name="sKey"></param>
///
<param name="sIV"></param>
///
<returns></returns>
public
string
Decrypt3DES(
string
str,
string
sKey,
string
sIV)
{
SymmetricAlgorithm mCSP
=
new
TripleDESCryptoServiceProvider();
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte
[] byt;
mCSP.Key
=
Convert.FromBase64String(sKey);
mCSP.IV
=
Convert.FromBase64String(sIV);
mCSP.Mode
=
System.Security.Cryptography.CipherMode.ECB;
mCSP.Padding
=
System.Security.Cryptography.PaddingMode.PKCS7;
ct
=
mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
byt
=
Convert.FromBase64String(str);
ms
=
new
MemoryStream();
cs
=
new
CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt,
0
, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return
Encoding.UTF8.GetString(ms.ToArray());
}
#endregion
#region
一个简单的加密解密方法,只支持英文
public
static
string
EnCryptEnStr(
string
str)
//
倒序加1加密
{
byte
[] by
=
new
byte
[str.Length];
for
(
int
i
=
0
;
i
<=
str.Length
-
1
;
i
++
)
{
by[i]
=
(
byte
)((
byte
)str[i]
+
1
);
}
str
=
""
;
for
(
int
i
=
by.Length
-
1
;
i
>=
0
;
i
--
)
{
str
+=
((
char
)by[i]).ToString();
}
return
str;
}
public
static
string
DeCryptEnStr(
string
str)
//
顺序减1解码
{
byte
[] by
=
new
byte
[str.Length];
for
(
int
i
=
0
;
i
<=
str.Length
-
1
;
i
++
)
{
by[i]
=
(
byte
)((
byte
)str[i]
-
1
);
}
str
=
""
;
for
(
int
i
=
by.Length
-
1
;
i
>=
0
;
i
--
)
{
str
+=
((
char
)by[i]).ToString();
}
return
str;
}
#endregion
#region
一个简单的加密解密方法,在上一个的基础上支持中文
public
static
string
EnCryptCnStr(
string
str)
{
string
htext
=
""
;
//
blank text
for
(
int
i
=
0
; i
<
str.Length; i
++
)
{
htext
=
htext
+
(
char
)(str[i]
+
10
-
1
*
2
);
}
return
htext;
}
public
static
string
DeCryptCnStr(
string
str)
{
string
dtext
=
""
;
for
(
int
i
=
0
; i
<
str.Length; i
++
)
{
dtext
=
dtext
+
(
char
)(str[i]
-
10
+
1
*
2
);
}
return
dtext;
}
#endregion
#region
Url地址编码解码
///
<summary>
///
编码Url地址
///
</summary>
///
<param name="url"></param>
///
<returns></returns>
public
static
string
UrlEncode(
string
url)
{
byte
[] mByte
=
null
;
mByte
=
System.Text.Encoding.GetEncoding(
"
GB2312
"
).GetBytes(url);
return
System.Web.HttpUtility.UrlEncode(mByte);
}
///
<summary>
///
解码Url地址
///
</summary>
///
<param name="url"></param>
///
<returns></returns>
public
static
string
UrlDecode(
string
url)
{
return
HttpUtility.UrlDecode(url, System.Text.Encoding.GetEncoding(
"
GB2312
"
));
}
#endregion