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

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

今天,看到网友咨询DES加密的事,就写了下面的类库,sharing 一下,欢迎多交流

复制代码
using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.IO;
using  System.Security;
using  System.Security.Cryptography;

/* ----------------------------------------------
* DES加密、解密类库,字符串加密结果使用BASE64编码返回,支持文件的加密和解密
* 作者: 三角猫/DeltaCat
* 网址: 
http://www.zu14.cn
* 转载务必保留此信息
* ---------------------------------------------
*/

namespace  ZU14
{
public   sealed   class  DES
{
string  iv  =   " 1234的yzo " ;
string  key  =   " 123在yzo " ;

///   <summary>
///  DES加密偏移量,必须是>=8位长的字符串
///   </summary>
public   string  IV
{
get  {  return  iv; }
set  { iv  =  value; }
}

///   <summary>
///  DES加密的私钥,必须是8位长的字符串
///   </summary>
public   string  Key
{
get  {  return  key; }
set  { key  =  value; }
}

///   <summary>
///  对字符串进行DES加密
///   </summary>
///   <param name="sourceString"> 待加密的字符串 </param>
///   <returns> 加密后的BASE64编码的字符串 </returns>
public   string  Encrypt( string  sourceString)
{
byte [] btKey  =  Encoding.Default.GetBytes(key);
byte [] btIV  =  Encoding.Default.GetBytes(iv);
DESCryptoServiceProvider des 
=   new  DESCryptoServiceProvider();
using  (MemoryStream ms  =   new  MemoryStream())
{
byte [] inData  =  Encoding.Default.GetBytes(sourceString);
try
{
using  (CryptoStream cs  =   new  CryptoStream(ms, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
{
cs.Write(inData, 
0 , inData.Length);
cs.FlushFinalBlock();
}

return  Convert.ToBase64String(ms.ToArray());
}
catch
{
throw ;
}
}
}

///   <summary>
///  对DES加密后的字符串进行解密
///   </summary>
///   <param name="encryptedString"> 待解密的字符串 </param>
///   <returns> 解密后的字符串 </returns>
public   string  Decrypt( string  encryptedString)
{
byte [] btKey  =  Encoding.Default.GetBytes(key);
byte [] btIV  =  Encoding.Default.GetBytes(iv);
DESCryptoServiceProvider des 
=   new  DESCryptoServiceProvider();

using  (MemoryStream ms  =   new  MemoryStream())
{
byte [] inData  =  Convert.FromBase64String(encryptedString);
try
{
using  (CryptoStream cs  =   new  CryptoStream(ms, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
{
cs.Write(inData, 
0 , inData.Length);
cs.FlushFinalBlock();
}

return  Encoding.Default.GetString(ms.ToArray());
}
catch
{
throw ;
}
}
}

///   <summary>
///  对文件内容进行DES加密
///   </summary>
///   <param name="sourceFile"> 待加密的文件绝对路径 </param>
///   <param name="destFile"> 加密后的文件保存的绝对路径 </param>
public   void  EncryptFile( string  sourceFile,  string  destFile)
{
if  ( ! File.Exists(sourceFile))  throw   new  FileNotFoundException( " 指定的文件路径不存在! " , sourceFile);

byte [] btKey  =  Encoding.Default.GetBytes(key);
byte [] btIV  =  Encoding.Default.GetBytes(iv);
DESCryptoServiceProvider des 
=   new  DESCryptoServiceProvider();
byte [] btFile  =  File.ReadAllBytes(sourceFile);

using  (FileStream fs  =   new  FileStream(destFile, FileMode.Create, FileAccess.Write))
{
try
{
using  (CryptoStream cs  =   new  CryptoStream(fs, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
{
cs.Write(btFile, 
0 , btFile.Length);
cs.FlushFinalBlock();
}
}
catch
{
throw ;
}
finally
{
fs.Close();
}
}
}

///   <summary>
///  对文件内容进行DES加密,加密后覆盖掉原来的文件
///   </summary>
///   <param name="sourceFile"> 待加密的文件的绝对路径 </param>
public   void  EncryptFile( string  sourceFile)
{
EncryptFile(sourceFile, sourceFile);
}

///   <summary>
///  对文件内容进行DES解密
///   </summary>
///   <param name="sourceFile"> 待解密的文件绝对路径 </param>
///   <param name="destFile"> 解密后的文件保存的绝对路径 </param>
public   void  DecryptFile( string  sourceFile,  string  destFile)
{
if  ( ! File.Exists(sourceFile))  throw   new  FileNotFoundException( " 指定的文件路径不存在! " , sourceFile);

byte [] btKey  =  Encoding.Default.GetBytes(key);
byte [] btIV  =  Encoding.Default.GetBytes(iv);
DESCryptoServiceProvider des 
=   new  DESCryptoServiceProvider();
byte [] btFile  =  File.ReadAllBytes(sourceFile);

using  (FileStream fs  =   new  FileStream(destFile, FileMode.Create, FileAccess.Write))
{
try
{
using  (CryptoStream cs  =   new  CryptoStream(fs, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
{
cs.Write(btFile, 
0 , btFile.Length);
cs.FlushFinalBlock();
}
}
catch
{
throw ;
}
finally
{
fs.Close();
}
}
}

///   <summary>
///  对文件内容进行DES解密,加密后覆盖掉原来的文件
///   </summary>
///   <param name="sourceFile"> 待解密的文件的绝对路径 </param>
public   void  DecryptFile( string  sourceFile)
{
DecryptFile(sourceFile, sourceFile);
}
}
}
复制代码

使用的例子

复制代码
ZU14.DES des  =   new  ZU14.DES();
des.IV 
=   " abcd哈哈笑 " ;
des.Key 
=   " 必须八位 " ;

string  es  =  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 );
复制代码

OK了。




本文转自黄聪博客园博客,原文链接:http://www.cnblogs.com/huangcong/archive/2010/03/26/1697230.html如需转载请自行联系原作者

相关文章
|
1天前
|
前端开发 C#
C# 一分钟浅谈:字符串操作与正则表达式
本文详细介绍C#中的字符串操作与正则表达式应用,涵盖字符串拼接、分割、查找及替换等基础操作,并通过实例讲解正则表达式的模式匹配、文本替换与分组捕获技巧。同时,文章还探讨了性能优化、复杂度管理和安全性等问题及解决策略,助你提升编程效率,应对实际开发挑战。
16 0
|
1月前
|
监控 安全 C#
使用C#如何监控选定文件夹中文件的变动情况?
使用C#如何监控选定文件夹中文件的变动情况?
94 19
|
1月前
|
编译器 C# Windows
C#基础:手动编译一个.cs源代码文件并生成.exe可执行文件
通过上述步骤,应该能够高效准确地编译C#源代码并生成相应的可执行文件。此外,这一过程强调了对命令行编译器的理解,这在调试和自动化编译流程中是非常重要的。
66 2
|
1月前
|
文字识别 C# Python
使用C#将几个Excel文件合并去重分类
使用C#将几个Excel文件合并去重分类
21 3
|
2月前
|
SQL 开发框架 前端开发
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
|
1月前
|
Java C# 数据安全/隐私保护
如何 使 Java、C# md5 加密的值保持一致
如何 使 Java、C# md5 加密的值保持一致
22 0
|
1月前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
|
1月前
|
C#
C# 写日志文件
C# 写日志文件
38 0
|
3月前
|
C#
C# 中的字符与字符串
C# 中的字符与字符串
|
3月前
|
Java BI C#
技术笔记:SM4加密算法实现Java和C#相互加密解密
技术笔记:SM4加密算法实现Java和C#相互加密解密
50 0