數據加密可在網絡(luo)OSI七層協議(yi)(OSI是(shi)Open System Interconnect的縮寫,意為開(kai)放式系統(tong)互聯。國際標準組織(zhi)(國際標準化組織(zhi))制(zhi)定了OSI模型(xing)。這個模型(xing)把網絡通信的工作分(fen)為7層(ceng)(ceng),分(fen)別是(shi)物理層(ceng)(ceng)、數據鏈路(lu)層(ceng)(ceng)、網絡層(ceng)(ceng)、傳輸層(ceng)(ceng)、會話層(ceng)(ceng)、表示層(ceng)(ceng)和應用層(ceng)(ceng)。)的多層上實現、所以從加密技術應用(yong)的邏輯位(wei)置看(kan),有三種方(fang)式:
①鏈(lian)路加密(mi)(mi):通(tong)(tong)常把網絡層以(yi)下的(de)(de)加密(mi)(mi)叫鏈(lian)路加密(mi)(mi),主(zhu)要用于(yu)保護通(tong)(tong)信節(jie)點間傳(chuan)輸的(de)(de)數據(ju)(ju),加解密(mi)(mi)由置于(yu)線(xian)路上(shang)的(de)(de)密(mi)(mi)碼設備實現(xian)。根據(ju)(ju)傳(chuan)遞的(de)(de)數據(ju)(ju)的(de)(de)同步(bu)方式又可(ke)分為同步(bu)通(tong)(tong)信加密(mi)(mi)和(he)(he)異步(bu)通(tong)(tong)信加密(mi)(mi)兩種,同步(bu)通(tong)(tong)信加密(mi)(mi)又包含字(zi)節(jie)同步(bu)通(tong)(tong)信加密(mi)(mi)和(he)(he)位同步(bu)通(tong)(tong)信加密(mi)(mi)。
②節點加密:是對鏈路加密的改進。在協議傳輸層上進行加密,主要是對源節點和目標節點之間傳輸數據進行加密保護,與鏈路加密類似.只是(shi)加(jia)(jia)密(mi)算法(fa)要結合(he)在(zai)依(yi)附于節點(dian)的加(jia)(jia)密(mi)模(mo)件中,克服了(le)鏈路加(jia)(jia)密(mi)在(zai)節點(dian)處易遭非法(fa)存取的缺點(dian)。
③端(duan)對端(duan)加(jia)密:網絡(luo)層以上的加(jia)密稱(cheng)為端(duan)對端(duan)加(jia)密。是面(mian)向網絡(luo)層主體。對應用層的數據信息進行加(jia)密,易(yi)于用軟(ruan)件實(shi)現,且成本低,但(dan)密鑰管理(li)問題困難,主要適合大(da)型網絡(luo)系(xi)統中信息在多個發(fa)方和收(shou)方之間傳輸的情況。
常見的加密算法基本分(fen)為(wei)這(zhe)幾類,
線性散列算(suan)法(簽名算(suan)法)MD5 SHA1
對稱性加密算法AES DES
非(fei)對(dui)稱性加密算法RSA
MD5是一種(zhong)被廣(guang)泛(fan)使用的線性散列(lie)算法,可以產生出一個128位(16字節)的(de)散列(lie)值(hash value),用于確保信(xin)息傳輸完整一(yi)致(zhi)。
MD5加密(mi)之后產生的(de)是一個固(gu)定長度(32位(wei)或(huo)者16位(wei))的(de)數據
MD5是(shi)可以(yi)進行(xing)反(fan)向暴力破(po)解的(de)(de)。也就是(shi)用很(hen)多不(bu)同的(de)(de)數(shu)據進行(xing)加密后跟已有的(de)(de)加密數(shu)據進行(xing)比照。理論(lun)上只需數(shu)據量足夠龐大MD5是可以被破(po)解的。
MD5考慮的是破解的成本(時間和機器(qi)性(xing)能)。假(jia)設破解當前的MD5密碼需(xu)要目前計算能力最優秀(xiu)的計算機工作100年才能破解(jie)完成。那么當(dang)前的MD5密碼就(jiu)是安(an)全的。
添加破解(jie)成本的方法(fa)。
使用(yong)一(yi)段無意義且隨(sui)機的私匙進行MD5加密會生成一個加密串,我們(men)暫且稱(cheng)之為串1
將要加密的的數據跟串1拼接,再進(jin)行(xing)一(yi)次MD5,這時會生成串(chuan)2
將串(chuan)2再次進行MD5加密(mi),這時生成的串3就是我們加密后的數據。
解密。MD5不(bu)存在解(jie)密。只能把(ba)數據進行相(xiang)同(tong)的MD5解決之后跟之前的的加(jia)密串進行(xing)比照。
我們在注(zhu)冊賬號時(shi)的密碼一般(ban)都是用的MD5加密。
RSA加密:RSA加密(mi)算(suan)法是(shi)一種非對(dui)稱加密(mi)算(suan)法。在公開密(mi)鑰加密(mi)和(he)電(dian)子商(shang)業中RSA被廣泛使用。(這才(cai)是(shi)正經的加密算(suan)法)
非對稱加密算法:非對稱加密算法需要兩個密鑰(yao):公開密鑰(yao)(publickey:簡稱(cheng)公鑰)和私有密鑰(privatekey:簡稱(cheng)私(si)鑰(yao))。公鑰(yao)與(yu)私(si)鑰(yao)是一(yi)對(dui),假如(ru)用公鑰(yao)對(dui)數據(ju)進(jin)行加(jia)密(mi),只(zhi)有用對(dui)應(ying)的(de)(de)私(si)鑰(yao)才能解(jie)密(mi)。由于(yu)加(jia)密(mi)和解(jie)密(mi)使用的(de)(de)是兩個(ge)不(bu)同(tong)的(de)(de)密(mi)鑰(yao),所以這種算法(fa)叫(jiao)作(zuo)非對(dui)稱(cheng)加(jia)密(mi)算法(fa)。
使(shi)用(yong)時都是使(shi)用(yong)公匙(chi)加(jia)密(mi)使(shi)用(yong)私匙(chi)解密(mi)。公匙(chi)可以公開,私匙(chi)自(zi)己保(bao)留。
算法(fa)強度復(fu)雜(za)、安全性依賴于算法(fa)與(yu)密(mi)鑰但是因(yin)為其(qi)算法(fa)復(fu)雜(za),而(er)使得加密(mi)解密(mi)速(su)度沒(mei)有對稱加密(mi)解密(mi)的速(su)度快。
通(tong)過公(gong)匙加密,使用私匙解(jie)密。私匙是(shi)通(tong)過公(gong)匙計(ji)算生成的。假設(she)ABC三方之間相(xiang)互要進(jin)(jin)行加密(mi)(mi)通信(xin)。大(da)家相(xiang)互之間使用公(gong)匙(chi)進(jin)(jin)行信(xin)息加密(mi)(mi),信(xin)息讀取時使用各自對應的(de)私匙(chi)進(jin)(jin)行信(xin)息解密(mi)(mi)。
網站客戶輸入的支付密碼會通過RSA加密。
DES全稱為(wei)Data Encryption Standard,即數據加密標準,是一(yi)種使用(yong)密鑰加密的(de)塊算法。
DES算(suan)法的入口參數有(you)三個(ge):Key、Data、Mode。其中Key為7個字節共56位(wei),是DES算法的工(gong)作密鑰(yao);Data為(wei)8個字節64位,是要被(bei)加(jia)密或者(zhe)被(bei)解密的(de)數據;Mode為DES的工(gong)作方式,有兩種:加(jia)密或者解(jie)密。
AES這個標(biao)準用來替代原價的(de)DES。
DES/AES我(wo)們(men)合(he)并(bing)在一起詳(xiang)情其用法和(he)特點(dian)。
DES/AES是一種對稱加(jia)密方式,加(jia)密運算、解密運算使(shi)用(yong)的是同樣的密鑰。
使用(yong)DES/AES進行數據交互(hu)時(shi)要求(qiu)雙(shuang)方都擁有相同的私(si)匙。
破解方(fang)法,暴力破解。DES使用56位的(de)密鑰(yao),則可能的(de)密鑰(yao)數量是2的56次方個。只需計算足夠強(qiang)大是可以被破解的。
Base64是一種用64個(ge)字符來(lai)表(biao)示任意二進制數據的(de)方(fang)法。base64是(shi)一(yi)種編碼方(fang)式而不是(shi)加密(mi)算(suan)法。只是(shi)看上(shang)去像是(shi)加密(mi)而已(嚇唬人)。
base64原(yuan)理
Base64使(shi)用(yong)A--Z,a--z,0--9,+,/這64個(ge)字符。
將3個(ge)字節(jie)轉換(huan)成4個字節((3 X 8)=24=(4 X 6))先讀入3個字(zi)節(jie),每讀一個字(zi)節(jie),左移(yi)8位,再右移(yi)四次(ci),每次(ci)6位,這樣就(jiu)有4個字節了。
Response.Write("
-----------MD5加密(mi)---------------
");
Response.Write(SDKSecurity.MD5Encrypt("仰天一笑"));
Response.Write("
-----------DES加(jia)密---------------
");
Response.Write(SDKSecurity.DESEncrypt("仰天一笑(xiao)","anson-xu"));
Response.Write("
-----------DES解(jie)密---------------
");
Response.Write(SDKSecurity.DESDecrypt("l06JvJ45r/lb9iKzSXl47Q==","anson-xu"));
Response.Write("
-----------AES加(jia)密---------------
");
Response.Write(SDKSecurity.AESEncrypt("仰天一笑","ansonxuyu"));
Response.Write("
-----------AES解(jie)密(mi)---------------
");
Response.Write(SDKSecurity.AESDecrypt("avwKL+MO8+zoLHvzk0+TBA==","ansonxuyu"));