分享程序员开发的那些事...
首页
NTFS
漏洞
Android
Magento
服务器
Python
powershell
技术问答
Linux
网站首页
且构网 - 分享程序员编程开发的那些事
您所在的位置:
首页
>
Cryptography,一个C#写的加解密算法的类
Cryptography,一个C#写的加解密算法的类
更新时间:2022-09-10 13:25:25
一个加解密算法的类,如下:
Code
using
System;
using
System.IO;
using
System.Security.Cryptography;
using
System.Text;
namespace
SurvIT.Business.UserPrivilege
{
///
<summary>
///
Symmtric Crypto
///
</summary>
public
class
RijndaelCrypto
{
private
SymmetricAlgorithm _objCryptoService;
private
string
_strKey
=
"
Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7
"
;
private
string
_strIV
=
"
E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk
"
;
///
<summary>
///
Conctructor
///
</summary>
public
RijndaelCrypto(
string
key,
string
IV)
{
_objCryptoService
=
new
RijndaelManaged();
_objCryptoService
=
new
TripleDESCryptoServiceProvider();
_strKey
=
key;
_strIV
=
IV;
}
public
RijndaelCrypto()
{
_objCryptoService
=
new
RijndaelManaged();
_objCryptoService
=
new
TripleDESCryptoServiceProvider();
}
///
<summary>
///
Get the key
///
</summary>
///
<returns>
key
</returns>
private
byte
[] GetLegalKey()
{
string
sTemp
=
_strKey;
_objCryptoService.GenerateKey();
byte
[] bytTemp
=
_objCryptoService.Key;
int
KeyLength
=
bytTemp.Length;
if
(sTemp.Length
>
KeyLength)
sTemp
=
sTemp.Substring(
0
, KeyLength);
else
if
(sTemp.Length
<
KeyLength)
sTemp
=
sTemp.PadRight(KeyLength,
'
'
);
return
ASCIIEncoding.ASCII.GetBytes(sTemp);
}
///
<summary>
///
Initialize IV
///
</summary>
///
<returns>
Initialize IV
</returns>
private
byte
[] GetLegalIV()
{
_objCryptoService.GenerateIV();
byte
[] bytTemp
=
_objCryptoService.IV;
int
IVLength
=
bytTemp.Length;
if
(_strIV.Length
>
IVLength)
_strIV
=
_strIV.Substring(
0
, IVLength);
else
if
(_strIV.Length
<
IVLength)
_strIV
=
_strIV.PadRight(IVLength,
'
'
);
return
ASCIIEncoding.ASCII.GetBytes(_strIV);
}
///
<summary>
///
Encrypto
///
</summary>
///
<param name="Source">
The source string need to encrypto
</param>
///
<returns>
The string after crypto
</returns>
public
string
Encrypto(
string
Source)
{
byte
[] bytIn
=
UTF8Encoding.UTF8.GetBytes(Source);
MemoryStream ms
=
new
MemoryStream();
_objCryptoService.Key
=
GetLegalKey();
_objCryptoService.IV
=
GetLegalIV();
ICryptoTransform encrypto
=
_objCryptoService.CreateEncryptor();
using
(CryptoStream cs
=
new
CryptoStream(ms, encrypto, CryptoStreamMode.Write))
{
cs.Write(bytIn,
0
, bytIn.Length);
cs.FlushFinalBlock();
ms.Close();
byte
[] bytOut
=
ms.ToArray();
string
strRet
=
Convert.ToBase64String(bytOut);
cs.Clear();
return
strRet;
}
}
///
<summary>
///
Decrypto
///
</summary>
///
<param name="Source">
The srouce need to decrypto
</param>
///
<returns>
The result string after decrypto
</returns>
public
string
Decrypto(
string
Source)
{
byte
[] bytIn
=
Convert.FromBase64String(Source);
using
(MemoryStream ms
=
new
MemoryStream(bytIn,
0
, bytIn.Length))
{
_objCryptoService.Key
=
GetLegalKey();
_objCryptoService.IV
=
GetLegalIV();
ICryptoTransform encrypto
=
_objCryptoService.CreateDecryptor();
CryptoStream cs
=
new
CryptoStream(ms, encrypto, CryptoStreamMode.Read);
StreamReader sr
=
new
StreamReader(cs);
string
strRet
=
sr.ReadToEnd();
cs.Clear();
return
strRet;
}
}
}
}
用法如下:
Code
public
static
string
EncryptoPassword(
string
pwd)
{
RijndaelCrypto rijndael
=
new
RijndaelCrypto();
return
rijndael.Encrypto(pwd);
}
public
static
string
DecryptoPassword(
string
CryptoPwd)
{
RijndaelCrypto rijndael
=
new
RijndaelCrypto();
return
rijndael.Decrypto(CryptoPwd);
}
本文转自loose_went博客园博客,原文链接:
http://www.cnblogs.com/michaelxu/archive/2009/06/03/1495746.html
,如需转载请自行联系原作者
上一篇 : :Html 字体大小单位 px em pt
下一篇 : 数据库多表连接查询详解
相关阅读
Cryptography,一个C#写的加解密算法的类
推荐文章
在好多网站上的注册都用了无刷新验证用户名
来试试,用3dsmax渲染比较测试你CPU的速度
DataStage V7.5 下载
DiPiPi安卓反编译工具发布
关于Android的振动控制器(Vibrator)报SecurityException异常的问题
C# Tips 2则
使用Oracle ODP.NET 11g的.NET程序发布方法(转)
第07篇:C#星夜拾遗之delegate示例
Modbus RTU 通信工具设计
Free Online SQL Formatter