用C#实现的数据加密(一)——对称加密算法

文章作者 100test 发表时间 2007:05:12 12:14:26
来源 100Test.Com百考试题网


计算机等级考试训练软件《百宝箱》

用C#实现的数据加密(一) —— 对称加密算法

以下是关于对称加密算法的C#实现代码,大家可以根据需要更改不同的算法,文中以Rijndael算法为例:

using System.
using System.IO.
using System.Security.Cryptography.
using System.Text.

namespace DataCrypto
{
///
/// 对称加密算法类
///

public class SymmetricMethod
{

private SymmetricAlgorithm mobjCryptoService.
private string Key.
///
/// 对称加密类的构造函数
///

public SymmetricMethod()
{
mobjCryptoService = new RijndaelManaged().
Key = "Guz(%&.hj7x89H$yuBI0456FtmaT5&.fvHUFCy76*h%(HilJ$lhj!y6&.(*jkP87jH7".
}
///
/// 获得密钥
///

/// 密钥
private byte[] GetLegalKey()
{
string sTemp = Key.
mobjCryptoService.GenerateKey().
byte[] bytTemp = mobjCryptoService.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).
}
///
/// 获得初始向量IV
///

/// 初试向量IV
private byte[] GetLegalIV()
{
string sTemp = "E4ghj*Ghg7!rNIfb&.95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&.!hg4ui%$hjk".
mobjCryptoService.GenerateIV().
byte[] bytTemp = mobjCryptoService.IV.
int IVLength = bytTemp.Length.
if (sTemp.Length > IVLength)
sTemp = sTemp.Substring(0, IVLength).
else if (sTemp.Length < IVLength)
sTemp = sTemp.PadRight(IVLength, ).
return ASCIIEncoding.ASCII.GetBytes(sTemp).
}
///
/// 加密方法
///

/// 待加密的串
/// 经过加密的串
public string Encrypto(string Source)
{
byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source).
MemoryStream ms = new MemoryStream().
mobjCryptoService.Key = GetLegalKey().
mobjCryptoService.IV = GetLegalIV().
ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor().
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write).
cs.Write(bytIn, 0, bytIn.Length).
cs.FlushFinalBlock().
ms.Close().
byte[] bytOut = ms.ToArray().
return Convert.ToBase64String(bytOut).
}
///
/// 解密方法
///

/// 待解密的串
/// 经过解密的串
public string Decrypto(string Source)
{
byte[] bytIn = Convert.FromBase64String(Source).
MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length).
mobjCryptoService.Key = GetLegalKey().
mobjCryptoService.IV = GetLegalIV().
ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor().
CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read).
StreamReader sr = new StreamReader(cs).
return sr.ReadToEnd().
}
}
}


相关文章


C#特性(Attribute)入门(一)
如何提高VFP应用软件的路径适应性
C#特性(Attribute)入门(二)
用C#实现的数据加密(二)——哈希算法
用C#实现的数据加密(一)——对称加密算法
Office2007中快速输入各种特殊符号
做好使用Office2007的准备
解读升级到Office2007的六大困惑
如何在WPS表格中输入平方和立方符号
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛