/// <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. IO流4

    IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字 ...

  2. 在工作中常用到的SQL

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 最近在公司做了几张报表,还记得刚开始要做报表的时候都 ...

  3. 使用f12定位bug

    为什么找到网站中的bug后还要去分析它到底是属于前端bug还是后端bug 三个原因: 1.在一些公司,一个系统可能是由前端团队和后端团队共同开发出来的,因此在分配bug的时候,不同模块的bug一般都会 ...

  4. DVWA-SQL注入

    SQL注入解题思路 寻找注入点,可以通过web扫描工具实现 通过注入点,尝试得到连接数据库的用户名,数据库名称,权限等信息. 猜解关键数据库表极其重要字段与内容. 通过获得的用户信息寻找后台进行登录. ...

  5. 数据类型之Integer与int

    数据类型之Integer与int Java入门  基本数据类型 众所周知,Java是面向对象的语言,一切皆对象.但是为了兼容人类根深蒂固的数据处理习惯,加快常规数据的处理速度,提供了9种基本数据类型, ...

  6. mule发布调用webservice

    mule发布webservice 使用mule esb消息总线发布和调用webservice都非常精简,mule包装了所有操作,你只需要拖控件配置就可以,下面讲解mule发布: 1.下面是flow,h ...

  7. 自定义SWT控件一之自定义单选下拉框

    一.自定义下拉控件 自定义的下拉框,是自定义样式的,其中的下拉框使用的是独立的window,非复选框的下拉框双击单机其它区域或选择完之后,独立window构成的下拉框会自动消失. package co ...

  8. Java枚举类型 enum

    定义 An enum type is a special data type that enables for a variable to be a set of predefined constan ...

  9. S3 Select for Java 使用记录

    背景 后台基本使用 Amazon 的全家桶(EC2.DynamoDB.S3.Step Fuction 等等)构建.现在需要根据访问者的 IP 确定访问者的国家或地区. 已知: 访问者 IP 一个 ip ...

  10. 利用hash或history实现单页面路由

    目录 html代码 css代码 JavaScript代码 hash方式 history 方式 浏览器端代码 服务器端 在chrome(版本 70.0.3538.110)测试正常 编写涉及:css, h ...