數據加密可在網絡OSI七層協議(OSI是Open System Interconnect的縮寫,意為開放式系統互聯。國際標準組織(國際標準化組織)制定了OSI模型。這個模型把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。)的多層上實現、所以從加密技術應用的邏輯位置看,有三種方式:
①鏈路加密:通常把網絡層以下的加密叫鏈路加密,主要用于保護通信節點間傳輸的數據,加解密由置于線路上的密碼設備實現。根據傳遞的數據的同步方式又可分為同步通信加密和異步通信加密兩種,同步通信加密又包含字節同步通信加密和位同步通信加密。
②節點加密:是對鏈路加密的改進。在協議傳輸層上進行加密,主要是對源節點和目標節點之間傳輸數據進行加密保護,與鏈路加密類似.只是加密算法要結合在依附于節點的加密模件中,克服了鏈路加密在節點處易遭非法存取的缺點。
③端對端加密:網絡層以上的加密稱為端對端加密。是面向網絡層主體。對應用層的數據信息進行加密,易于用軟件實現,且成本低,但密鑰管理問題困難,主要適合大型網絡系統中信息在多個發方和收方之間傳輸的情況。
常見的加密算法基本分為這幾類,
線性散列算法(簽名算法)MD5 SHA1
對稱性加密算法AES DES
非對稱性加密算法RSA
MD5是一種被廣泛使用的線性散列算法,可以產生出一個128位(16字節)的散列值(hash value),用于確保信息傳輸完整一致。
MD5加密之后產生的是一個固定長度(32位或者16位)的數據
MD5是可以進行反向暴力破解的。也就是用很多不同的數據進行加密后跟已有的加密數據進行比照。理論上只需數據量足夠龐大MD5是可以被破解的。
MD5考慮的是破解的成本(時間和機器性能)。假設破解當前的MD5密碼需要目前計算能力最優秀的計算機工作100年才能破解完成。那么當前的MD5密碼就是安全的。

添加破解成本的方法。
使用一段無意義且隨機的私匙進行MD5加密會生成一個加密串,我們暫且稱之為串1
將要加密的的數據跟串1拼接,再進行一次MD5,這時會生成串2
將串2再次進行MD5加密,這時生成的串3就是我們加密后的數據。
解密。MD5不存在解密。只能把數據進行相同的MD5解決之后跟之前的的加密串進行比照。
我們在注冊賬號時的密碼一般都是用的MD5加密。
RSA加密:RSA加密算法是一種非對稱加密算法。在公開密鑰加密和電子商業中RSA被廣泛使用。(這才是正經的加密算法)
非對稱加密算法:非對稱加密算法需要兩個密鑰:公開密鑰(publickey:簡稱公鑰)和私有密鑰(privatekey:簡稱私鑰)。公鑰與私鑰是一對,假如用公鑰對數據進行加密,只有用對應的私鑰才能解密。由于加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。
使用時都是使用公匙加密使用私匙解密。公匙可以公開,私匙自己保留。
算法強度復雜、安全性依賴于算法與密鑰但是因為其算法復雜,而使得加密解密速度沒有對稱加密解密的速度快。
通過公匙加密,使用私匙解密。私匙是通過公匙計算生成的。假設ABC三方之間相互要進行加密通信。大家相互之間使用公匙進行信息加密,信息讀取時使用各自對應的私匙進行信息解密。
網站客戶輸入的支付密碼會通過RSA加密。
DES全稱為Data Encryption Standard,即數據加密標準,是一種使用密鑰加密的塊算法。
DES算法的入口參數有三個:Key、Data、Mode。其中Key為7個字節共56位,是DES算法的工作密鑰;Data為8個字節64位,是要被加密或者被解密的數據;Mode為DES的工作方式,有兩種:加密或者解密。
AES這個標準用來替代原價的DES。
DES/AES我們合并在一起詳情其用法和特點。
DES/AES是一種對稱加密方式,加密運算、解密運算使用的是同樣的密鑰。
使用DES/AES進行數據交互時要求雙方都擁有相同的私匙。
破解方法,暴力破解。DES使用56位的密鑰,則可能的密鑰數量是2的56次方個。只需計算足夠強大是可以被破解的。
Base64是一種用64個字符來表示任意二進制數據的方法。base64是一種編碼方式而不是加密算法。只是看上去像是加密而已(嚇唬人)。
base64原理
Base64使用A--Z,a--z,0--9, ,/這64個字符。
將3個字節轉換成4個字節((3 X 8)=24=(4 X 6))先讀入3個字節,每讀一個字節,左移8位,再右移四次,每次6位,這樣就有4個字節了。
Response.Write("
-----------MD5加密---------------
");
Response.Write(SDKSecurity.MD5Encrypt("仰天一笑"));
Response.Write("
-----------DES加密---------------
");
Response.Write(SDKSecurity.DESEncrypt("仰天一笑","anson-xu"));
Response.Write("
-----------DES解密---------------
");
Response.Write(SDKSecurity.DESDecrypt("l06JvJ45r/lb9iKzSXl47Q==","anson-xu"));
Response.Write("
-----------AES加密---------------
");
Response.Write(SDKSecurity.AESEncrypt("仰天一笑","ansonxuyu"));
Response.Write("
-----------AES解密---------------
");
Response.Write(SDKSecurity.AESDecrypt("avwKL MO8 zoLHvzk0 TBA==","ansonxuyu"));