MD的全称是MessageDigest Algorithm (信息摘要算法)在年代初由Mit Laboratory for Computer Science和Rsa data security inc的Ronald l rivest开发出来经mdmd和md发展而来它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)不管是mdmd还是md它们都需要获得一个随机长度的信息并产生一个位的信息摘要
加密哈希函数将任意长度的二进制字符串映射为固定长度的小型二进制字符串加密哈希函数有这样一个属性在计算上不大可能找到散列为相同的值的两个不同的输入也就是说两组数据的哈希值仅在对应的数据也匹配时才会匹配数据的少量更改会在哈希值中产生不可预知的大量更改所以你很难从加密后的文字中找到蛛丝马迹
SHA的全称是Secure Hash Algorithm(安全哈希算法)
MD 算法的哈希值大小为位而SHA 算法的哈希值大小为位两种算法都是不可逆
虽说年月日的美国加州圣巴巴拉的国际密码学会议(Crypto’)上来自中国山东大学的王小云教授做了破译MDHAVAL MD和RIPEMD算法的报告公布了MD系列算法的破解结果宣告了固若金汤的世界通行密码标准MD5的堡垒轰然倒塌引发了密码学界的轩然大波但是我觉得对于我们做普通的软件来说三连素材这个加密安全程度已经足够使用了
我们平常用的最多的无非就是加密用户密码把加密好的密码存储到数据库中进行密码比较的时候把用户输入的密码再进行加密然后与数据库中的密文进行比较至于ASPnet类中是如何实现加密算法的这个我们不需要关心会用就行了
下面就是ASPNET中几种加密方法加密算法有两种也就是上面提到的MD和SHA这里我举的例子是以MD为例SHA大致相同只是使用的类不一样
MD 相关类
SystemSecurityCryptographyMD
SystemSecurityCryptographyMDCryptoServiceProvider()
SystemWebSecurityFormsAuthenticationHashPasswordForStoringInConfigFile(strSource "MD")
SHA相关类
SystemSecurityCryptographySHA
SystemSecurityCryptographySHACryptoServiceProvider()
SystemWebSecurityFormsAuthenticationHashPasswordForStoringInConfigFile(strSource "SHA")
方法如下(用的vs)
/**//// <summary>
/// 方法一:通过使用 new 运算符创建对象
/// </summary>
/// <param name="strSource">需要加密的明文</param>
/// <returns>返回位加密结果该结果取位加密结果的第位到位</returns>
public string Get_MD_Method(string strSource)
{
//new
SystemSecurityCryptographyMD md = new SystemSecurityCryptographyMDCryptoServiceProvider();
//获取密文字节数组
byte[] bytResult = mdComputeHash(SystemTextEncodingDefaultGetBytes(strSource));
//转换成字符串并取到位
string strResult = BitConverterToString(bytResult );
//转换成字符串位
//string strResult = BitConverterToString(bytResult);
//BitConverter转换出来的字符串会在每个字符中间产生一个分隔符需要去除掉
strResult = strResultReplace("" "");
return strResult;
}
/**//// <summary>
/// 方法二:通过调用特定加密算法的抽象类上的 Create 方法创建实现特定加密算法的对象
/// </summary>
/// <param name="strSource">需要加密的明文</param>
/// <returns>返回位加密结果</returns>
public string Get_MD_Method(string strSource)
{
string strResult = "";
//Create
SystemSecurityCryptographyMD md = SystemSecurityCryptographyMDCreate();
//注意编码UTFUTFUnicode等的选择
byte[] bytResult = mdComputeHash(SystemTextEncodingUTFGetBytes(strSource));
//字节类型的数组转换为字符串
for (int i = ; i < bytResultLength; i++)
{
//进制转换
strResult = strResult + bytResult[i]ToString("X");
}
return strResult;
}
/**//// <summary>
/// 方法三:直接使用HashPasswordForStoringInConfigFile生成
/// </summary>
/// <param name="strSource">需要加密的明文</param>
/// <returns>返回位加密结果</returns>
public string Get_MD_Method(string strSource)
{
return SystemWebSecurityFormsAuthenticationHashPasswordForStoringInConfigFile(strSource "MD");
}
这些加密函数都是在服务器端执行也就是说当用户输入密码后从客户端到服务器端传输时用户的密码没有任何保护很危险银行的做法是在客户端安装ActiveX控件在客户端就把一些重要信息进行加密再发送这个偶就不会拉很希望能学习学习做这种ActiveX控件