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控件
From:http://tw.wingwit.com/Article/program/net/201311/14023.html