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

简介:

今天,看到网友咨询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月前
|
存储 Java 数据安全/隐私保护
Java技术栈揭秘:Base64加密和解密文件的实战案例
以上就是我们今天关于Java实现Base64编码和解码的实战案例介绍。希望能对你有所帮助。还有更多知识等待你去探索和学习,让我们一同努力,继续前行!
144 5
|
2月前
|
存储 监控 算法
基于 C# 的局域网计算机监控系统文件变更实时监测算法设计与实现研究
本文介绍了一种基于C#语言的局域网文件变更监控算法,通过事件驱动与批处理机制结合,实现高效、低负载的文件系统实时监控。核心内容涵盖监控机制选择(如事件触发机制)、数据结构设计(如监控文件列表、事件队列)及批处理优化策略。文章详细解析了C#实现的核心代码,并提出性能优化与可靠性保障措施,包括批量处理、事件过滤和异步处理等技术。最后,探讨了该算法在企业数据安全监控、文件同步备份等场景的应用潜力,以及未来向智能化扩展的方向,如文件内容分析、智能告警机制和分布式监控架构。
62 3
|
4月前
|
存储 安全 数据安全/隐私保护
Hyper V文件复制安全:加密与访问控制
在Hyper-V环境中,确保文件复制的安全性至关重要。主要措施包括:启用数据加密、使用HTTPS协议和磁盘加密技术(如BitLocker)保护数据传输和存储;通过身份验证、权限管理和审核日志控制访问;定期更新补丁、实施网络隔离及制定备份恢复策略。这些多层次的安全措施共同防止未经授权的访问和数据泄露,保障数据安全。
Hyper V文件复制安全:加密与访问控制
|
7月前
|
算法 网络安全 区块链
2023/11/10学习记录-C/C++对称分组加密DES
本文介绍了对称分组加密的常见算法(如DES、3DES、AES和国密SM4)及其应用场景,包括文件和视频加密、比特币私钥加密、消息和配置项加密及SSL通信加密。文章还详细展示了如何使用异或实现一个简易的对称加密算法,并通过示例代码演示了DES算法在ECB和CBC模式下的加密和解密过程,以及如何封装DES实现CBC和ECB的PKCS7Padding分块填充。
152 4
2023/11/10学习记录-C/C++对称分组加密DES
|
7月前
|
算法 数据安全/隐私保护 Python
DES加密初探
本文介绍了Python中常用的DES和3DES加解密方法,包括ECB和CBC模式。通过示例代码展示了如何使用`Crypto`和`pyDes`库实现加解密,并讨论了不同的填充方式。最后,通过一道CTF例题,详细解析了从图像中提取密文、进行ASCII转换、Base64解码、凯撒解码和最终的DES解密过程。
256 4
DES加密初探
|
7月前
|
C#
基于 C# 编写的 Visual Studio 文件编码显示与修改扩展插件
基于 C# 编写的 Visual Studio 文件编码显示与修改扩展插件
138 9
|
9月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
284 3
python知识点100篇系列(15)-加密python源代码为pyd文件
|
9月前
|
数据安全/隐私保护 Python
Zipfile学习笔记(二)::通过zipfile模块暴力破解加密的压缩文件
如何使用Python的zipfile模块生成密码表并尝试暴力破解加密的ZIP压缩文件。
179 1
Zipfile学习笔记(二)::通过zipfile模块暴力破解加密的压缩文件
|
9月前
|
存储 安全 算法
C#一分钟浅谈:数据加密与解密技术
【10月更文挑战第3天】在数字化时代,信息安全至关重要。数据加密作为保障信息不被未授权访问的有效手段,通过特定算法将明文转换为密文,确保即使数据被截获也难以解读。本文从基础概念入手,介绍C#中实现数据加密的方法,涵盖对称加密(如AES、DES)与非对称加密(如RSA),并通过具体示例代码演示如何使用`System.Security.Cryptography.Aes`类完成AES加密和解密过程。此外,还强调了密钥管理及安全策略的重要性。
183 4
|
9月前
|
存储 C#
【C#】大批量判断文件是否存在的两种方法效率对比
【C#】大批量判断文件是否存在的两种方法效率对比
176 1

热门文章

最新文章