/// <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;
}

.net中DES加密算法研究的更多相关文章

  1. android和.net webservice中的DES加密算法

    也是看了一堆的例子,本身并不会写加密算法,好在只要会用就行了,我们把在app中使用的参数加密,然后在.net端的webservice中进行解密,本身并没有什么问题,但是android下和.net下的d ...

  2. JAVA使用DES加密算法加密解密

    程序中使用了.properties文件作为参数配置文档,好处是灵活配置各项参数 一旦对数据库的一些参数进行了配置,势必涉及数据库的IP,端口,用户名和密码 properties文件全是unicode编 ...

  3. (iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题

    我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Bas ...

  4. 浅谈DES加密算法

    一.DES加密算法介绍 1.要求密钥必须是8个字节,即64bit长度 2.因为密钥是byte[8] , 代表字符串也可以是非可见的字节,可以与Base64编码算法一起使用 3.加密.解密都需要通过字节 ...

  5. .NET中的加密算法总结(自定义加密Helper类续)

    1.1.1 摘要 相信许多人都使用过.NET提供的加密算法,而且在使用的过程我们必须了解每种加密算法的特点(对称或非对称,密钥长度和初始化向量等等).我也看到过很多人写过.NET中加密算法总结,但我发 ...

  6. 对称密码——DES加密算法

    前言 本篇博文将介绍对称密码算法中的DES密码的算法原理与代码实现(Java) DES算法原理 DES加密算法是对称加密算法(加密和解密使用同一个密钥)中的一种,DES也是分组密码,以64位为分组对明 ...

  7. des加密算法java&c#

    项目中用到的数据加密方式是ECB模式的DES加密得到的十六进制字符串.技术支持让写一个.net版的加密算法.这里做一下记录. java版: 16进制使用的是bouncycastle. import c ...

  8. DES加密算法的C++实现

    <信息安全技术>这门课又在讲 DES 加密算法了,以前用纯C写过一次,这次我用 C++ 重新写了一个,写篇文章以备后用.本文介绍了 DES 算法加密的大致步骤和整体流程. 一.DES算法原 ...

  9. 在.NET Core 里使用 BouncyCastle 的DES加密算法

    .NET Core上面的DES等加密算法要等到1.2 才支持,我们可是急需这个算法的支持,文章<使用 JavaScriptService 在.NET Core 里实现DES加密算法>需要用 ...

随机推荐

  1. get解决乱码的方式

    //自定义的解决乱码方式

  2. spring cloud eureka + feign,api远程调用

    网上教程不少,有些就是复制粘贴,不结合实际生产. eureka不再阐述. 一般正常开发会有多个工程,且多个module. 我的习惯是: eureka server.权限.config.gateway ...

  3. Thinkphp5.0快速入门笔记(1)

    学习来源与说明 https://www.kancloud.cn/thinkphp/thinkphp5_quickstart 测试与部署均在windows10下进行学习. Composer安装和更新 C ...

  4. CEPH 对象存储的系统池介绍

    RGW抽象来看就是基于rados集群之上的一个rados-client实例. Object和pool简述 Rados集群网上介绍的文章很多,这里就不一一叙述,主要要说明的是object和pool.在r ...

  5. java-web调用后台下载方法

    后台下载指定文件必定会用到流, 无论使用poi还是使用jxl导出excel都需要用到流一种是outputstrean,另一种fileoutputstream第一种:如果想要弹出保存的提示框必须加入下列 ...

  6. .xxx.sh脚本无法启动,原来都是特殊字符搞的鬼?

    今天遇到个趣的问题,linux上springboot启动,连接达梦数据库报错. 解决思路: 1)是不是数据库本身有问题,客户端登录没问题. 2)排查是不是war包问题,本地连接数据库,没问题. 3)是 ...

  7. 3、K-近邻算法

    K最近邻(k-Nearest Neighbor,KNN)分类算法 1.定义:如果一个样本在特征空间中的k个最近似(即特征空间中最临近)的样本中大多数属于某一类别,则该样本也属于这个类别. 2.计算公式 ...

  8. mybatis学习笔记(一)

    mybatis学习笔记 mybatis简介 Mybatis 开源免费框架.原名叫iBatis,2010在googlecode,2013年迁移到 github 作用: 数据访问层框架,底层对JDBC进行 ...

  9. python3学习-requests使用

    前面我们讲过了urllib模块,知道他是用于网络请求的,这一节讲的requests还是用于网络请求的,只不过urllib是官方模块,而requests是第三方的模块.用过的人都说他才是'人类使用的', ...

  10. 5.MySQL数据库操作步骤

    第一步:登录到MySQL服务器 第二步:选择当前要操作的数据库 第三步:设置请求和返回数据的字符集 第四步:执行SQL语句 l 增加记录:INSERT INTO news(title,content) ...