您的位置:首页 > 编程语言 > C#

C# DES 加密/解密,支持文件和中文/UNICODE字符,返回BASE64编码字符串

2013-01-24 13:47 1346 查看
这篇文章还有些价值,测试过能用,对字符串中文乱码问题可解决,对文件加密解密中文乱码问题不可解决

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.IO;
usingSystem.Security;
usingSystem.Security.Cryptography;
/*----------------------------------------------
*DES加密、解密类库,字符串加密结果使用BASE64编码返回,支持文件的加密和解密
*作者:三角猫/DeltaCat
*网址:http://www.zu14.cn*转载务必保留此信息
*---------------------------------------------
*/
namespaceZU14
{
publicsealedclassDES
{
stringiv="1234的yzo";
stringkey="123在yzo";
///<summary>
///DES加密偏移量,必须是>=8位长的字符串
///</summary>
publicstringIV
{
get{returniv;}
set{iv=value;}
}
///<summary>
///DES加密的私钥,必须是8位长的字符串
///</summary>
publicstringKey
{
get{returnkey;}
set{key=value;}
}
///<summary>
///对字符串进行DES加密
///</summary>
///<paramname="sourceString">待加密的字符串</param>
///<returns>加密后的BASE64编码的字符串</returns>
publicstringEncrypt(stringsourceString)
{
byte[]btKey=Encoding.Default.GetBytes(key);
byte[]btIV=Encoding.Default.GetBytes(iv);
DESCryptoServiceProviderdes=newDESCryptoServiceProvider();
using(MemoryStreamms=newMemoryStream())
{
byte[]inData=Encoding.Default.GetBytes(sourceString);
try
{
using(CryptoStreamcs=newCryptoStream(ms,des.CreateEncryptor(btKey,btIV),CryptoStreamMode.Write))
{
cs.Write(inData,0,inData.Length);
cs.FlushFinalBlock();
}
returnConvert.ToBase64String(ms.ToArray());
}
catch
{
throw;
}
}
}
///<summary>
///对DES加密后的字符串进行解密
///</summary>
///<paramname="encryptedString">待解密的字符串</param>
///<returns>解密后的字符串</returns>
publicstringDecrypt(stringencryptedString)
{
byte[]btKey=Encoding.Default.GetBytes(key);
byte[]btIV=Encoding.Default.GetBytes(iv);
DESCryptoServiceProviderdes=newDESCryptoServiceProvider();
using(MemoryStreamms=newMemoryStream())
{
byte[]inData=Convert.FromBase64String(encryptedString);
try
{
using(CryptoStreamcs=newCryptoStream(ms,des.CreateDecryptor(btKey,btIV),CryptoStreamMode.Write))
{
cs.Write(inData,0,inData.Length);
cs.FlushFinalBlock();
}
returnEncoding.Default.GetString(ms.ToArray());
}
catch
{
throw;
}
}
}
///<summary>
///对文件内容进行DES加密
///</summary>
///<paramname="sourceFile">待加密的文件绝对路径</param>
///<paramname="destFile">加密后的文件保存的绝对路径</param>
publicvoidEncryptFile(stringsourceFile,stringdestFile)
{
if(!File.Exists(sourceFile))thrownewFileNotFoundException("指定的文件路径不存在!",sourceFile);
byte[]btKey=Encoding.Default.GetBytes(key);
byte[]btIV=Encoding.Default.GetBytes(iv);
DESCryptoServiceProviderdes=newDESCryptoServiceProvider();
byte[]btFile=File.ReadAllBytes(sourceFile);
using(FileStreamfs=newFileStream(destFile,FileMode.Create,FileAccess.Write))
{
try
{
using(CryptoStreamcs=newCryptoStream(fs,des.CreateEncryptor(btKey,btIV),CryptoStreamMode.Write))
{
cs.Write(btFile,0,btFile.Length);
cs.FlushFinalBlock();
}
}
catch
{
throw;
}
finally
{
fs.Close();
}
}
}
///<summary>
///对文件内容进行DES加密,加密后覆盖掉原来的文件
///</summary>
///<paramname="sourceFile">待加密的文件的绝对路径</param>
publicvoidEncryptFile(stringsourceFile)
{
EncryptFile(sourceFile,sourceFile);
}
///<summary>
///对文件内容进行DES解密
///</summary>
///<paramname="sourceFile">待解密的文件绝对路径</param>
///<paramname="destFile">解密后的文件保存的绝对路径</param>
publicvoidDecryptFile(stringsourceFile,stringdestFile)
{
if(!File.Exists(sourceFile))thrownewFileNotFoundException("指定的文件路径不存在!",sourceFile);
byte[]btKey=Encoding.Default.GetBytes(key);
byte[]btIV=Encoding.Default.GetBytes(iv);
DESCryptoServiceProviderdes=newDESCryptoServiceProvider();
byte[]btFile=File.ReadAllBytes(sourceFile);
using(FileStreamfs=newFileStream(destFile,FileMode.Create,FileAccess.Write))
{
try
{
using(CryptoStreamcs=newCryptoStream(fs,des.CreateDecryptor(btKey,btIV),CryptoStreamMode.Write))
{
cs.Write(btFile,0,btFile.Length);
cs.FlushFinalBlock();
}
}
catch
{
throw;
}
finally
{
fs.Close();
}
}
}
///<summary>
///对文件内容进行DES解密,加密后覆盖掉原来的文件
///</summary>
///<paramname="sourceFile">待解密的文件的绝对路径</param>
publicvoidDecryptFile(stringsourceFile)
{
DecryptFile(sourceFile,sourceFile);
}
}
}


使用实例:

ZU14.DESdes=newZU14.DES();
des.IV="abcd哈哈笑";
des.Key="必须八位";
stringes=des.Encrypt("在");
Console.WriteLine(es);
Console.Write(des.Decrypt(es));
des.EncryptFile(@"d:\a.txt",@"d:\b.txt");
des.DecryptFile(@"d:\b.txt");
Console.ReadKey(true);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐