Asp.Net 常用工具类之加密——对称加密DES算法(2)
又到周末,下午博客园看了两篇文章,关于老跳和老赵的程序员生涯,不禁感叹漫漫程序路,何去何从兮!
转眼毕业的第三个年头,去过苏州,跑过上海,从一开始的凌云壮志,去年背起行囊默默回到了长沙准备买房,也想有个家(毕竟年级不小了),有盼头的工作前景。
看到老赵和老跳两位前辈的故事,真实且现实,同时也有一丢丢的小迷茫,敢问路在何方!
感叹一会儿,生命不止,Code不止,继续入坑!
昨天分享了一下非对称加密RSA算法,今天给朋友们分享一下对称加密DES算法案例。
加解密过程:
1、生成加密密钥key,密码越长,越难破解,穷举太累
2、加密:通过等分、移位、选取和迭代形成一套16个加密密钥,分别供每一轮运算中使用
3、解密:解密密钥的次序相反
上述我理解的DES加解密过程,当然咯,这里涉及到密码安全学,本人涉及粗浅。详情百度《DES加密算法原理》。
C#中大多加解密算法都集中在 System.Security.Cryptography 空间,谨记。
下面通过一个案例给大家展示一下:
using System;
using System.Globalization;
using System.IO;
using System.Security.Cryptography;
using System.Text; namespace Utils.PassWord
{
/// <summary>
/// DES加解密
/// </summary>
public static class DES
{
/// <summary>
/// 生成key
/// </summary>
public static void Generator(out string key)
{
DESCryptoServiceProvider des = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
key = ASCIIEncoding.ASCII.GetString(des.Key);
} /// <summary>
/// 加密
/// </summary>
/// <param name="password"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string DESEncrypt(string password, string key)
{
byte[] data = Encoding.UTF8.GetBytes(password);
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(key);
DES.IV = ASCIIEncoding.ASCII.GetBytes(key);
ICryptoTransform desEncrypt = DES.CreateEncryptor();
byte[] result = desEncrypt.TransformFinalBlock(data, , data.Length);
return BitConverter.ToString(result);
} /// <summary>
/// 解密
/// </summary>
/// <param name="password"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string DESDecrypt(string password, string key)
{
string[] sinput = password.Split("-".ToCharArray());
byte[] data = new byte[sinput.Length];
for (int i = ; i < sinput.Length; i++)
{
data[i] = byte.Parse(sinput[i], NumberStyles.HexNumber);
}
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(key);
DES.IV = ASCIIEncoding.ASCII.GetBytes(key);
ICryptoTransform desencrypt = DES.CreateDecryptor();
byte[] result = desencrypt.TransformFinalBlock(data, , data.Length);
return Encoding.UTF8.GetString(result);
} /// <summary>
/// 加密数据 MD5方式
/// </summary>
/// <param name="str"></param>
/// <param name="key">加密密钥</param>
/// <returns></returns>
public static string DESEncryptMD5(string str, string key)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray;
inputByteArray = Encoding.Default.GetBytes(str);
des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5").Substring(, ));
des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5").Substring(, ));
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
ret.AppendFormat("{0:X2}", b);
return ret.ToString();
} /// <summary>
/// 解密数据 MD5方式
/// </summary>
/// <param name="str"></param>
/// <param name="key">加密密钥</param>
/// <returns></returns>
public static string DESDecryptMD5(string str, string key)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
int len;
len = str.Length / ;
byte[] inputByteArray = new byte[len];
int x, i;
for (x = ; x < len; x++)
{
i = Convert.ToInt32(str.Substring(x * , ), );
inputByteArray[x] = (byte)i;
}
des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5").Substring(, ));
des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5").Substring(, ));
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, , inputByteArray.Length);
cs.FlushFinalBlock();
return Encoding.Default.GetString(ms.ToArray());
}
}
} 调用方式
public static void des()
{
string key = "";
DES.Generator(out key);
var aaa = DES.DESEncryptMD5("", "");
var bbb = DES.DESDecryptMD5(aaa, "");
var cc = DES.DESEncrypt("", key);
var dd = DES.DESDecrypt(cc, key);
}
OK,各位看官,这一期的文章对称加密DES算法写到这里喏,感谢大家的支持,您的支持是我的动力!
下一期给大家带来的是加密可逆与不可逆的几种方式,敬请期待!!!
Asp.Net 常用工具类之加密——对称加密DES算法(2)的更多相关文章
- Asp.Net 常用工具类之加密——非对称加密RSA算法
踏入程序员这个行业也有几年了,几年中有收获(技术加强),有付出(时间和亚健康状态).当然喏,并不后悔,代码路还长!!! On The Way,永不止步!!! 开发过程中也积累了一些自己的经验.代码块和 ...
- Asp.Net 常用工具类之Office—Excel导入(5)
之前在做一个项目的时候,客户方面只提供了一份简单的Excel文件,且要跟现有数据进行对接. 当时想到的是如果数据量不大,可以Excel一条一条加进去,无奈数据有几十兆!!! 换了一种思维,进行了导入: ...
- Asp.Net 常用工具类---Config操作(7)
近期工作比较忙,忙到忘记写博客(自己的借口,主要加班下班后不想动). 月初的时候,打算每两天写一篇博文,分享自己的一些心得和开发体验,无奈现在只写到第六篇,然而时间已经是20号,岁月不饶人! 总想写点 ...
- Asp.Net 常用工具类之Office—Excel导出(4)
开发过程中各类报表导入导出防不胜防,网上也是各种解决方法层出不穷,比如Excel,CSV,Word,PDF,HTML等等... 网上各种导出插件也是层出不穷,NPOI,微软Microsoft.Offi ...
- Asp.Net 常用工具类之Office-文档操作(6)
文档一直是老大难问题,君不知,代码用时方恨少!有一套成熟的文件帮助类能很大程度上减少寻找各种资料的时间. 记得以前做一个业务,需要导出协议,一份可编辑,一份不可编辑.那么Word和PDF是最好的选择, ...
- [C#] 常用工具类——加密解密类
using System; using System.Configuration; using System.Collections.Generic; using System.Text; using ...
- Apache Commons 常用工具类整理
其实一直都在使用常用工具类,只是从没去整理过,今天空了把一些常用的整理一下吧 怎么使用的一看就明白,另外还有注释,最后的使用pom引入的jar包 public class ApacheCommonsT ...
- [C#] 常用工具类——文件操作类
/// <para> FilesUpload:工具方法:ASP.NET上传文件的方法</para> /// <para> FileExists:返回文件是否存在&l ...
- PHP常用工具类
<?php namespace isslib\Util; use think\Config; /** * 常用工具类 * User: xaxiong * Date: 2016/12/19 * T ...
随机推荐
- setTimeout,setInterval 最短触发时间
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- PHP批量上传一次点击选中多个
首先前端部分需要设置好控件,这里使用HTML5 中 input 的新增属性 multiple 可以很好的解决了以往上传多个需要点击多次"上传按钮"的麻烦: <form act ...
- robotium从入门到放弃 一 测试开发环境搭建
1.JDK的安装及环境变量的配置 配置JAVA的运行环境,添加完环境变量后,可以打开Windows命令处理程序窗口,通过执行命令java -version验证环境变量是否添加成功.如果添加成功会 ...
- 勘误《iOS网络高级编程:iPhone和iPad的企业应用开发》
VII页 , 倒数第二行, “其他” 应为 “其它” X页, 源代码有错误,说是有19章,实际一共13章 XI页,勘误表的链接也是错误的 .是该书的<Beginning ASP.NET 4.5 ...
- delphi bitbutton和speedbutton.button有什么区别
http://zhidao.baidu.com/link?url=LT9_iwv47GfSp3m0MmUSablZrPOxzjKtqWW1yVMTbHnIs2DdCE-0qX2bwXZ2020x_Jl ...
- 冒泡排序法-java案例详解
/** * 功能:冒泡排序法 * 思想:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码, * ,若发现逆序这交换,使得排序码较小的元素逐渐从后部移向前部(从下标较大的单元移 ...
- 获取打开文件的PID
var SI : TStartupInfo; PI : TProcessInformation; pid:DWORD; begin ZeroMemory(@SI, SizeOf(SI)); //Zer ...
- CSS BUG 总结
1.IE7 容器使用了滚动条 其子元素中使用 position:relative ,position变成了fixed,从而不随容器的滚动条滚动; 解决: 在其容器元素的属性中也加入 position ...
- Scrum
Scrum[编辑] 维基百科,自由的百科全书 Scrum是一种敏捷软件开发的方法学,用于迭代式增量软件开发过程.Scrum在英语是橄榄球运动中争球的意思. 虽然Scrum是为管理软件开发项目而开发 ...
- PHP上传图片重命名6种方案
一. 适用场景:无法使用从数据库中返回的自增长数字,给上传图片重命名.这是图片或文件上传的流程决定的.一般图片上传处理过程是,先上传图片到服务器,重命名之后,插入到数据库.也就是说,在数据库中非常容易 ...