本文转自:http://www.cnblogs.com/yaob/archive/2011/05/20/2051642.html
听说 AES 加密是非常安全的, 256 位的甚至是美国神马安全局的加密标准.
本着收藏不为人知的邪恶资料, 在网上找了一下怎么用 C# 去实现这个加密和解密. 很可惜的是, 网上的代码, 要么出错, 要么不完整, 甚至连微软 MSDN 的代码也讲的不清不楚. 自己经过多方面的整理之后, 得出了以下两段可用的代码. 希望对大家有所帮助.
加密:
public
byte
[] AesEncryptor(
byte
[] bsFile,
string
password)
{
RijndaelManaged aes = new RijndaelManaged();
aes.Key = Encoding.UTF8.GetBytes( this .PasswordMD5(password));
aes.IV = Encoding.UTF8.GetBytes( this .PasswordMD5(password).Substring( 8 , 16 ));
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform transform = aes.CreateEncryptor();
return transform.TransformFinalBlock(bsFile, 0 , bsFile.Length);
}
{
RijndaelManaged aes = new RijndaelManaged();
aes.Key = Encoding.UTF8.GetBytes( this .PasswordMD5(password));
aes.IV = Encoding.UTF8.GetBytes( this .PasswordMD5(password).Substring( 8 , 16 ));
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform transform = aes.CreateEncryptor();
return transform.TransformFinalBlock(bsFile, 0 , bsFile.Length);
}
解密:
public
byte
[] AesDecryptor(
byte
[] bsFile,
string
password)
{
RijndaelManaged aes = new RijndaelManaged();
aes.Key = Encoding.UTF8.GetBytes( this .PasswordMD5(password));
aes.IV = Encoding.UTF8.GetBytes( this .PasswordMD5(password).Substring( 8 , 16 ));
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform transform = aes.CreateDecryptor();
return transform.TransformFinalBlock(bsFile, 0 , bsFile.Length);
}
{
RijndaelManaged aes = new RijndaelManaged();
aes.Key = Encoding.UTF8.GetBytes( this .PasswordMD5(password));
aes.IV = Encoding.UTF8.GetBytes( this .PasswordMD5(password).Substring( 8 , 16 ));
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform transform = aes.CreateDecryptor();
return transform.TransformFinalBlock(bsFile, 0 , bsFile.Length);
}
使用说明:
用法其实非常简单. 两法方法都差不多, 简单说一下.
传入文件的 byte 数组, 以及密码. 因为这个 256 位的 key 是需要 32 位的, 而 IV 是需要 16 位, 于是我用了一个 PasswordMD5 来将密码处理为 32 位. 如果你还不知道怎么 MD5, 可以看我之前的文章.
另外就是, KEY 和 IV 都是解密的时候要用到的, 且两个值必须正确, 才能成功解开.
两个方法的返回值都是 byte 数组, 把数组用 File 类写入到文件中, 加密和解密就完成了~