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);
相关文章推荐
- C# DES 加密/解密类库,支持文件和中文/UNICODE字符,返回BASE64编码字符串
- C# DES 加密/解密类库,支持文件和中文/UNICODE字符,返回BASE64编码字符串
- C# DES 加密/解密,支持文件和中文/UNICODE字符,返回BASE64编码字符串
- 黄聪:C# DES 加密/解密类库,支持文件和中文/UNICODE字符,返回BASE64编码字符串
- [读书笔记]C# DES 加密/解密类库,支持文件和中文/UNICODE字符,返回BASE64编码字符串
- [转]C# DES 加密/解密类库,支持文件和中文/UNICODE字符,返回BASE64编码字符串
- 在Javascript 中的Base64加密,支持中文加密及emoji表情的unicode编码的base64加密
- http 请求数据返回 json 中中文字符为 unicode 编码转汉字转码
- base64编码和aes加密和解密配置文件
- vs错误:使用 简体中文GB2312 编码加载文件时,有些字节已用unicode替换字符替换
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- Java使用百度API 返回JSON数据为unicode编码,怎么转化为中文?
- jquery对中文进行base64加密,后台用java进行base64解密
- [Python] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题
- 解决 iOS NSDictionary 输出中文字符”乱码”(Unicode编码)问题
- [原创]DES加密解密工具2.1及其代码——支持字符串及文件加密,支持3重DES
- jquery对中文进行base64加密,后台用java进行base64解密
- 使用 Java 将中文字符转换成 Unicode 编码
- Unicode中关于中文和其他特殊字符的编码范围
- java中国际化properties的Unicode编码文件用命令转化为中文文件