C#提供了多种加密方式,包括DES、MD5和RC2等,用于数据的安全存储和传输。以下主要介绍C#中的DES加密算法。 DES(Data Encryption Standard)是一种经典的对称加密算法,其安全性基于复杂的数学运算,通常用于保护敏感数据。在C#中,可以使用`System.Security.Cryptography`命名空间下的类来实现DES加密和解密。示例代码中的`DES.cs`文件展示了如何使用C#进行DES操作。 在`DES`类中,有一个核心方法`DesEncrypt`,它接受两个参数:需要加密的字符串`pToEncrypt`和用于加密的密钥`sKey`。首先,将输入的字符串转换为字节数组`inputByteArray`。然后,创建一个`DESCryptoServiceProvider`对象,这是C#中实现DES加密的类。设置密钥和初始向量(IV),两者都需要是8个字节或16个十六进制字符。密钥和IV通常应该随机生成,以增加安全性。 接着,创建一个`MemoryStream`对象`ms`用于临时存储加密后的数据,以及一个`CryptoStream`对象`cs`,它与`MemoryStream`关联,并设置为写入模式。`CryptoStream`使用`des.CreateEncryptor()`创建一个加密流,该流将对`inputByteArray`进行加密并写入到`MemoryStream`中。最后,调用`cs.FlushFinalBlock()`确保所有数据都被加密并写入。 为了得到加密后的十六进制字符串,遍历`MemoryStream`中的每个字节,将其格式化为两位十六进制字符串,并添加到`StringBuilder`对象`ret`中。返回的`ret.ToString()`就是加密后的字符串。 请注意,DES算法由于其密钥长度较短(64位,实际使用中只有56位),在现代计算能力下已经不再安全。更安全的选择包括AES(Advanced Encryption Standard),它支持更长的密钥和块大小,提供了更高的安全性。在实际应用中,应考虑使用如AES这样的更强大且广泛认可的加密算法。 此外,C#还提供了其他加密选项,如MD5(Message-Digest Algorithm 5)是一种哈希函数,常用于数据完整性校验;RC2是另一种可变密钥长度的对称加密算法。这些加密方式各有特点,适用于不同的场景。在选择加密算法时,需要权衡安全性、性能和实现复杂性等因素。
//---------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.IO;
using System.Security.Cryptography;
namespace Encrypt.Algorithm
{
/// <summary>
/// DES加密解密算法
/// </summary>
public class DES
{
/// <summary>
/// DES加密算法
/// sKey为8位或16位
/// </summary>
/// <param name="pToEncrypt">需要加密的字符串</param>
/// <param name="sKey">密钥</param>
/// <returns></returns>
public string DesEncrypt(string pToEncrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
return ret.ToString();
//return a;
}
/// <summary>
/// DES解密算法
/// sKey为8位或16位
/// </summary>
/// <param name="pToDecrypt">需要解密的字符串</param>
/// <param name="sKey">密钥</param>
/// <returns></returns>
public string DesDecrypt(string pToDecrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
for (int x = 0; x < pToDecrypt.Length / 2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
}
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
剩余31页未读,继续阅读
- 粉丝: 1
- 资源: 10
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦