今天第一次写点东西,就把自己工作中遇到的一些问题,解决的方法写出来。大部分的思路和方法也是来源于互联网,也许是搬门弄斧,但我也更希望能给需要的朋友带来点帮助。
在进行软件开发的过程中,为了提高系统的安全性能,经常需要进行敏感信息的加密处理。特别是在密码储存、文件传输、页面传值等方面,对信息进行加密显得十分必要。目前比较流行的就是MD5、SHA1等加密算法,这里先简单作些记录:
(1) MD5
MD5的全称是Message-digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc,的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4和MD5完全不同,那是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。
简单例子:
public static string MD5(string toCryString)
{
///方法一
/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);
}
if (code == 32) //32位加密
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, MD5).ToLower();
}
return 00000000000000000000000000000000;
///方法二
//using System.Security.Cryptography;
//using System.Text;
MD5CryptoServiceProvider hashmd5;
hashmd5 = new MD5CryptoServiceProvider();
//asp是小写,把所有字符变小写
return BitConverter.ToString(hashmd5.ComputeHash(Encoding.Default.GetBytes(toCryString))).Replace("-", "").ToLower();
///方法三(一个简单的方法)已经实验可用
if(!String.IsNullOrEmpty(toCryString)
{
return FormsAuthentication.HashPasswordForStoringInConfigFile(toCryString, "MD5");
}
else
{
return string.Empty;
}
}
(2)SHA1
安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。
SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。
简单例子:
private string getSHA(string code)
{
if (!String.IsNullOrEmpty(code))
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(code, "SHA1").ToLower();
}
else
{
return string.Empty;
}
}