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