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’)上来自中国山东大学的王小云教授做了破译MD HAVAL MD和RIPEMD算法的报告公布了MD系列算法的破解结果宣告了固若金汤的世界通行密码标准MD5的堡垒轰然倒塌引发了密码学界的轩然大波但 是我觉得对于我们做普通的软件来说这个加密安全程度已经足够使用了
我们平常用的最多的无非就是加密用户密码把加密好的密码存储到数据库中进行密码比较的时候把用户输入的密码再进行加密然后与数据库中的密文 进行比较至于ASPnet类中是如何实现加密算法的这个我们不需要关心会用就行了
下面就是ASPNET中几种加密方法加密算法有两种也就是上面提到的MD和SHA这里我举的例子是以MD为例SHA大致相同只 是使用的类不一样
MD 相关类
System
Security
Cryptography
MD
System
Security
Cryptography
MD
CryptoServiceProvider()
System
Web
Security
FormsAuthentication
HashPasswordForStoringInConfigFile(strSource
"MD
")
SHA相关类
System
Security
Cryptography
SHA
System
Security
Cryptography
SHA
CryptoServiceProvider()
System
Web
Security
FormsAuthentication
HashPasswordForStoringInConfigFile(strSource
"SHA
")
方法如下(用的vs)
/**//// <summary>
/// 方法一:通过使用 new 运算符创建对象
/// </summary>
/// <param name="strSource">需要加密的明文</param>
/// <returns>返回
位加密结果
该结果取
位加密结果的第
位到
位</returns>
public string Get_MD
_Method
(string strSource)
{
//new
System
Security
Cryptography
MD
md
= new System
Security
Cryptography
MD
CryptoServiceProvider();
//获取密文字节数组
byte[] bytResult = md
ComputeHash(System
Text
Encoding
Default
GetBytes(strSource));
//转换成字符串
并取
到
位
string strResult = BitConverter
ToString(bytResult
);
//转换成字符串
位
//string strResult = BitConverter
ToString(bytResult);
//BitConverter转换出来的字符串会在每个字符中间产生一个分隔符
需要去除掉
strResult = strResult
Replace("
"
"");
return strResult;
}
/**//// <summary>
/// 方法二:通过调用特定加密算法的抽象类上的 Create 方法
创建实现特定加密算法的对象
/// </summary>
/// <param name="strSource">需要加密的明文</param>
/// <returns>返回
位加密结果</returns>
public string Get_MD
_Method
(string strSource)
{
string strResult = "";
//Create
System
Security
Cryptography
MD
md
= System
Security
Cryptography
MD
Create();
//注意编码UTF
UTF
Unicode等的选择
byte[] bytResult = md
ComputeHash(System
Text
Encoding
UTF
GetBytes(strSource));
//字节类型的数组转换为字符串
for (int i =
; i < bytResult
Length; 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 System
Web
Security
FormsAuthentication
HashPasswordForStoringInConfigFile(strSource
"MD
");
}
这些加密函数都是在服务器端执行也就是说当用户输入密码后从客户端到服务器端传输时用户的密码没有任何保护很危险银行的做法是在客户端 安装ActiveX控件在客户端就把一些重要信息进行加密再发送这个偶就不会拉很希望能学习学习做这种ActiveX控件