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