程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> MD5加密算法簡介及C#實現

MD5加密算法簡介及C#實現

編輯:.NET實例教程
項目開發過程中,經常會遇到需要加密的需求,在這裡簡單為大家介紹一下MD5加密解密原理,並用C# 實現。由於沒有仔細研究過,函數寫的比較粗糙,有興趣的可以改進一下哦!

      MD5的全稱是Message-Digest Algorithm 5,在90年代初由MIT的計算機科學實驗室和RSA Data Security Inc發明,經MD2、MD3和MD4發展而來。Message-Digest泛指字節串(Message)的Hash變換,就是把一個任意長度的字節串變換成一定長的大整數。請注意我使用了“字節串”而不是“字符串”這個詞,是因為這種變換只與字節的值有關,與字符集或編碼方式無關。MD5將任意長度的“字節串”變換成一個128bit的大整數,並且它是一個不可逆的字符串變換算法,換句話說就是,即使你看到源程序和算法描述,也無法將一個MD5的值變換回原始的字符串,從數學原理上說,是因為原始的字符串有無窮多個,這有點象不存在反函數的數學函數。
    MD5還廣泛用於加密和解密技術上,在很多網站系統中,用戶的密碼是以MD5值(或類似的其它算法)的方式保存的,用戶Login的時候,系統是把用戶輸入的密碼計算成MD5值,然後再去和系統中保存的MD5值進行比較。這樣即使黑客得到數據庫也不知道登錄密碼,確保了網站的安全。
   以下為兩個簡單的加密、解密函數
  



using System.IO;
using System.Text;
using System.Security.Cryptography;
 public string MD5Encrypt(string  pToEncrypt,  string  sKey)  
  ...{   
   //8位密鑰,16位加密結果
   DESCryptoServiceProvider  des  =  new  DESCryptoServiceProvider();     
   byte[]  inputByteArray  =  Encoding.Default.GetBytes(pToEncrypt);
   des.Key  =  ASCIIEncoding.ASCII.GetBytes(sKey);     
   des.IV  =  ASCIIEncoding.ASCII.GetBytes(sKey);     
   MemoryStream  ms  =  new  MemoryStream();     
   CryptoStream  cs  =  new  CryptoStream(ms,  des.CreateEncryptor(),CryptoStreamMode.Write);     
   cs.Write(inputByteArray,  0,  inputByteArray.Length);     
   cs.FlushFinalBlock();     
   StringBuilder  ret  =  new  StringBuilder();     
   foreach(byte  b  in  ms.ToArray())     
   ...{      
    ret.AppendFormat("{0:X2}",  b);     
   }     
   ret.ToString();       return  ret.ToString();    
  }
  /**////MD5解密  
  public string MD5Decrypt(string  pToDecrypt,  string  sKey)  
  ...{   
   DESCryptoServiceProvider  des  =  new  DESCryptoServiceProvider();      
   byte[]  inputByteArray  =  new  byte[pToDecrypt.Length  /  2];     
   for(int  x  =  0;  
    x  <  pToDecrypt.Length  /  2;  x++)     
   ...{      
    int  i  =  (Convert.ToInt32(pToDecrypt.Substring(x  *  2,  2),  16));      
    inputByteArray[x]  =  (byte)i;    
   }      
   des.Key  =  ASCIIEncoding.ASCII.GetBytes(sKey);     
   des.IV  =  ASCIIEncoding.ASCII.GetBytes(sKey);     
   MemoryStream  ms  =  new  MemoryStream();     
   CryptoStream  cs  =  new  CryptoStream(ms,  des.CreateDecryptor(),CryptoStreamMode.Write);     
   cs.Write(inputByteArray,  0,  inputByteArray.Length);     
   cs.FlushFinalBlock();      
   StringBuilder  ret  =  new  StringBuilder();                  
   return  System.Text.Encoding.Default.GetString(ms.ToArray());    
  }
 


 
By  deer_box

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved