/// <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. RobotFramework_2.新建项目、新建用例、运行用例和查看测试报告

    RobotFramework的使用 新建一个项目 Robotframework-ride的界面 分了四个区域:菜单栏.工具栏.案例及资源区.工作区,如下图: 创建项目 首先,点击File-New Pr ...

  2. 金蝶K3 V12.2版本,中途启用双计量单位出现错误

    忘记修改虚仓库存/收料通知单的双计量数量

  3. 2019年一半已过,这些大前端技术你都GET了吗?- 上篇

    一晃眼2019年已过大半,年初信誓旦旦要学习新技能的小伙伴们立的flag都完成的怎样了?2019年对于大前端技术领域而言变化不算太大,目前三大技术框架日趋成熟,短期内不大可能出现颠覆性的前端框架(内心 ...

  4. 【MySQL】添加多个字段

    MySQL 遇到了添加多个字段的问题,尝试了几次,搞定了,记录下. 示例代码如下: alter table ad_data add ( exposure_count bigint(20) defaul ...

  5. 【POJ - 3616】Milking Time(动态规划)

    Milking Time 直接翻译了 Descriptions 贝茜是一个勤劳的牛.事实上,她如此​​专注于最大化她的生产力,于是她决定安排下一个N(1≤N≤1,000,000)小时(方便地标记为0. ...

  6. io流处理文件夹复制功能(java代码)

    拷贝某个目录下得所有文件拷指定位置 思想归纳 首先我们需要做的先获取到资源文件夹路径,这里我们先在程序中写死,然后我们还需要一个目标文件夹就是你需要拷贝到哪里.有了这两个文件夹我就可以进行复制了 然后 ...

  7. python自动化运维技术读书笔记

    import psutilprint(psutil.cpu_times(percpu=True)) #使用cpu_times方法获取CPU完整信息需要显示所有逻辑CPU信息 import psutil ...

  8. jmeter界面字体修改

    实际应用中发现,同样是win10系统,显示器屏幕尺寸大小不同,jmeter界面字体展示也不一样,标准屏幕还可以,大屏幕下不能自动适应屏幕大小放大而且还变的更小.在查询解决方法时,发现有朋友出现类似情况 ...

  9. C# 读取CAD文件缩略图(DWG文件)

    //C# 读取CAD文件缩略图(DWG文件) https://blog.csdn.net/hanghangaidoudou/article/details/8589574 //2010-09-04 1 ...

  10. java算法(4)---静态内部类实现雪花算法

    静态内部类单例模式实现雪花算法 在生成表主键ID时,我们可以考虑主键自增 或者 UUID,但它们都有很明显的缺点 主键自增:1.自增ID容易被爬虫遍历数据.2.分表分库会有ID冲突. UUID: 1. ...