c# 实现MD5,SHA1,SHA256,SHA512等常用加密算法
2014-04-12 23:04
525 查看
在很多电子商务和社区应用中,我们都要存放很多的客户的资料,其中包括了很多的隐私信息和客户不愿被别人看到的信息,当然好有客户执行各种操作的密码,此时就需要对客户的信息进行加密再存储,目前有两种比较好的加密算法:MD5和sha1。
这两种加密算法都属于散列加密技术。所谓散列加密就是无论输入的字符串是什么,有多大,加密后都将变成唯一的定长的加密串。
首先介绍一下MD5,MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意是“字节串”而不是“字符串”,是因为这种变换只与字节的值有关,与字符集或编码方式无关。MD5将任意长度的“字节串”变换成一个128bit的大整数,并且这是一个不可逆的变换过程,要破解只能穷举,难度很大,理论上8位的密码组合有(26字母+10数字+21常用英文符号)的8次方种可能,以现在比较好的机器机器要算上一年多。MD5加密后的密串长度有16位和32位两种。不过最近MD5听说被破解了(听说还是被我们的国人破掉的,佩服啊!),能很快碰撞到密码,不过破解机还没有流传出来。
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
在Microsoft Visual Studio 2005对MD5加密算法有了很好的支持,使用起来非常简单,下面是在C#中使用MD5加密字符串的例子:
public string md5(string str,int code)
{
if(code==16) //16位MD5加密(取32位加密的9~25字符)
{
return System.Web.Security.FormsAuthentication.
HashPasswordForStoringInConfigFile(str,"MD5").ToLower().Substring(8,16) ;
}
else//32位加密
{
return System.Web.Security.FormsAuthentication.
HashPasswordForStoringInConfigFile(str,"MD5").ToLower();
}
}
使用sha1算法加密后的密串长度有40位,相对更安全一些。
在Microsoft Visual Studio 2005对sha1的使用也很简单,下面是在C#中使用sha1加密字符串的例子:
public string sha1(string str)
{
return System.Web.Security.FormsAuthentication.
HashPasswordForStoringInConfigFile(str, "sha1").ToLower();
}
不过最后还有一个不幸的消息,就是sha1算法已经被破解,国家标准和科技学院(National Institute of Standards and Technology)已经推荐使用sha-256或者sha-512算法。
这两种加密算法都属于散列加密技术。所谓散列加密就是无论输入的字符串是什么,有多大,加密后都将变成唯一的定长的加密串。
首先介绍一下MD5,MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意是“字节串”而不是“字符串”,是因为这种变换只与字节的值有关,与字符集或编码方式无关。MD5将任意长度的“字节串”变换成一个128bit的大整数,并且这是一个不可逆的变换过程,要破解只能穷举,难度很大,理论上8位的密码组合有(26字母+10数字+21常用英文符号)的8次方种可能,以现在比较好的机器机器要算上一年多。MD5加密后的密串长度有16位和32位两种。不过最近MD5听说被破解了(听说还是被我们的国人破掉的,佩服啊!),能很快碰撞到密码,不过破解机还没有流传出来。
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
在Microsoft Visual Studio 2005对MD5加密算法有了很好的支持,使用起来非常简单,下面是在C#中使用MD5加密字符串的例子:
public string md5(string str,int code)
{
if(code==16) //16位MD5加密(取32位加密的9~25字符)
{
return System.Web.Security.FormsAuthentication.
HashPasswordForStoringInConfigFile(str,"MD5").ToLower().Substring(8,16) ;
}
else//32位加密
{
return System.Web.Security.FormsAuthentication.
HashPasswordForStoringInConfigFile(str,"MD5").ToLower();
}
}
使用sha1算法加密后的密串长度有40位,相对更安全一些。
在Microsoft Visual Studio 2005对sha1的使用也很简单,下面是在C#中使用sha1加密字符串的例子:
public string sha1(string str)
{
return System.Web.Security.FormsAuthentication.
HashPasswordForStoringInConfigFile(str, "sha1").ToLower();
}
不过最后还有一个不幸的消息,就是sha1算法已经被破解,国家标准和科技学院(National Institute of Standards and Technology)已经推荐使用sha-256或者sha-512算法。
相关文章推荐
- C#|WINCE按钮重绘
- C# 6.0可能的新特性及C#发展历程
- vs c# 快捷键
- 转载——C# 6.0可能的新特性及C#发展历程
- 04-c#入门(类型转换)
- C# Form窗体子窗口关闭时刷新父窗体中的DataGridView
- Winform 关闭事件
- ArcEngine正确释放资源
- TaskMgr C#技术拾遗
- C#每天进步一点--异步编程模式
- C# 获取ASCII码值及数据进制转换(2、8、10、16进制)
- 纯C#电子相册开发序列之一
- Excel18位数字类型转换C#类型
- C# winform 上传图片,显示图片和gridview中添加按钮
- C#:数值与字符串之间相互转换
- 【搬运】SharpPcap的一些例子
- c# QQ欢乐斗地主记牌器
- C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母
- 微软宣布.NET Native预览版 C#可编...[C#]
- CLR via C#可空值类型