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