首页 技术 正文
技术 2022年11月8日
0 收藏 785 点赞 1,677 浏览 2189 个字

/// <summary>
/// DES加密算法
/// </summary>
/// <param name=”toEncrypt”>要加密的16进制字符串</param>
/// <param name=”_DESKey”>16进制密钥</param>
/// <returns>加密后的结果</returns>
public string DESEncrypt(string toEncrypt, string _DESKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //定义DES加密服务提供类
byte[] inputByte = strToToHexByte(toEncrypt); //将16进制的加密字符串转换为byte数组
byte[] key = strToToHexByte(_DESKey); //将16进制加密密匙转化为byte数组
des.Key = key; //加密密钥(必须为8字节)
des.IV = key; //暂时还未研究
des.Padding = PaddingMode.Zeros; //设置对称算法中的填充模式(很重要,不同的填充模式,结果的字节数就不同,结果也不相同)
des.Mode = CipherMode.ECB; //设置对称算法中的运算模式(很重要),不同的模式,加密出来的结果就不同
MemoryStream ms = new MemoryStream(); //创建其支持存储区为内存的流
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);//定义将数据流链接到加密转换的流
cs.Write(inputByte, 0, inputByte.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray()) //将字节流转换成字节数组
{
ret.AppendFormat(“{0:X2}”, b); //向可变字符串追加转换成十六进制数字符串的加密后byte数组
}
return ret.ToString();
}

/// <summary>
/// DES解密算法
/// </summary>
/// <param name=”toDecrypt”>要解密的16进制字符串</param>
/// <param name=”_DESKey”>16进制密钥</param>
/// <returns></returns>
public string DESDecrypt(string toDecrypt, string _DESKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //定义DES加密服务提供类
byte[] inputByte = strToToHexByte(toDecrypt); //将16进制的解密字符串转换为byte数组
byte[] key = strToToHexByte(_DESKey); //将16进制加密密匙转化为byte数组
des.Key = key; //加密密钥(必须为8字节)
des.IV = key; //暂时还未研究
des.Padding = PaddingMode.Zeros; //设置对称算法中的填充模式(很重要,不同的填充模式,结果的字节数就不同,结果也不相同)
des.Mode = CipherMode.ECB; //设置对称算法中的运算模式(很重要),不同的模式,加密出来的结果就不同
MemoryStream ms = new MemoryStream(); //创建其支持存储区为内存的流
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);//定义将数据流链接到加密转换的流
cs.Write(inputByte, 0, inputByte.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray()) //将字节流转换成字节数组
{
ret.AppendFormat(“{0:X2}”, b); //向可变字符串追加转换成十六进制数字符串的加密后byte数组
}
return ret.ToString();
}

/// <summary>
/// 将16进制字符串转换成字节数组
/// </summary>
/// <param name=”hexString”>16进制字符串</param>
/// <returns>输出字节数组</returns>
private static byte[] strToToHexByte(string hexString)
{
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
return returnBytes;
}

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,086
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,561
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,410
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,183
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,820
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,903