加密與解密

一、密碼學(xué)的起源
密碼學(xué)的出現(xiàn)主要是因為戰(zhàn)爭,有了戰(zhàn)爭,就有了密碼學(xué)的應(yīng)用環(huán)境。在戰(zhàn)爭中,對陣雙方要保護(hù)自己的通信安全并竊取、破譯對方的情報,就出現(xiàn)了密碼學(xué)。
為了保證通信的安全,出現(xiàn)了下面3種保密方法:
1、對傳遞的數(shù)據(jù)進(jìn)行加密,使用的方法包括:對稱加密算法、非對稱加密算法。
2、雖然對數(shù)據(jù)進(jìn)行了加密,但是會存在加密的數(shù)據(jù)被破壞的情況,因此使用散列函數(shù)來驗證數(shù)據(jù)的完整性。通過散列函數(shù),可以為數(shù)據(jù)創(chuàng)建一個散列值,散列值通常是一個短的隨機(jī)字母和數(shù)字組成的字符串,收發(fā)雙方提前約定要使用的散列算法,如果消息被篡改,數(shù)據(jù)前后所得的散列值就會不同。散列函數(shù)常用的算法有MD--消息摘要算法,SHA--安全散列算法、MAC--消息認(rèn)證碼算法。
3、除此之外還需要保證數(shù)據(jù)來源的可認(rèn)證性和數(shù)據(jù)發(fā)送行為的不可否認(rèn)性,就需要通過數(shù)字簽名來保證,數(shù)字簽名可以保證簽名者任何時候都無法否認(rèn)自己曾經(jīng)簽發(fā)的數(shù)字簽名,信息接受者能夠驗證和確認(rèn)收到的數(shù)字簽名,但任何人無法偽造發(fā)送者的數(shù)字簽名,當(dāng)收發(fā)雙方對數(shù)字簽名真?zhèn)萎a(chǎn)生爭議時,可進(jìn)行仲裁。數(shù)字簽名使用非對稱密碼體制,簽名算法受私鑰控制,由簽名者保密,驗證算法受公鑰控制,對外公開,也就是說私鑰用于簽名,公鑰用于驗證。常用的數(shù)字簽名算法有:RSA(即可用于非對稱加密算法,也可用于簽名算法)、DSA(屬于非對稱加密算法但不具備數(shù)據(jù)加解密功能)

Tips:
雙向認(rèn)證:
甲方用私鑰對數(shù)據(jù)做簽名發(fā)送給乙方,數(shù)據(jù)是可以保證安全的,但是如果乙方想發(fā)送消息給甲方,由于公鑰,算法都是公開的,竊聽者可以截獲乙方的消息替換成自己的,而甲方無法辨別消息是否來源于乙方,也就是說上述的認(rèn)證消息是單向的,屬于單向認(rèn)證。如果有兩套公私鑰,甲乙雙方都對數(shù)據(jù)做簽名及驗證就可以避免這個問題,這就是雙向認(rèn)證。

二、密碼學(xué)分類
1、按時間劃分
A、古典密碼:以字符為基本加密單元,通過移位(也稱錯位,將字符的順序重新排列,如:將“12345”變?yōu)椤?2165”),替代(也稱置換,將明文中的一組字符替代成其他字符,如:將“encryption”變?yōu)椤癴odszqujpo”每個字母用下一個字母替代)達(dá)到加密的目的。
B、現(xiàn)代密碼:以信息塊為基本加密單元
2、按保密內(nèi)容劃分
A、受限制算法:算法的保密性給予保持算法的秘密,算法由專業(yè)機(jī)構(gòu)開發(fā),驗證,確保其算法的安全性,是古典密碼學(xué)的主要特征。
B、基于密鑰算法:算法的保密性基于對密鑰的保密。這樣做的好處是:算法的公開有助于算法安全性的驗證,算法的漏洞得以及時修正,避免留下后面,這是先打密碼學(xué)的主要特征。
3、按密碼體制劃分
A、對稱密碼體制(單鑰密碼體制/私鑰密碼體制):加密與解密的密鑰相同,即加密與解密的過程中使用同一套密鑰。
B、非對稱密碼體制(雙鑰密碼體制/公鑰密碼體制):加密與解密的密鑰不同,分為公鑰與私鑰,公鑰對外公開,私鑰對外保密。
這兩種密碼體制對應(yīng)的算法為對稱密碼算法和非對稱密碼算法。
A、對稱密碼算法(單鑰密碼算法/私鑰密碼算法):DES,AES
B、非對稱密碼算法(雙鑰密碼算法/公鑰密碼算法):RSA,這種算法有更高的安全性,但是加密解密的耗時較長。
4、按明文的處理方法劃分
A、分組密碼:加密時將明文分成固定長度的租,用同一密鑰和算法對每一塊加密,輸出的也是固定長度的密文,多用于網(wǎng)絡(luò)加密。分組長度越長,密碼分析越困難,分組長度越短,操作運(yùn)算越簡單。代表算法:DES,AES。
分組密碼工作模式:
1)電子密碼本模式--ECB:是最基本、最易理解的工作模式。每次加密均產(chǎn)生獨(dú)立的密文分組,每組的加密結(jié)果不影響其他分組,相同明文加密后產(chǎn)生相同密文。適用于加密密鑰,隨機(jī)數(shù)等短數(shù)據(jù)。(如果密文較長,重復(fù)的內(nèi)容較多,則密文也會重復(fù),密文容易被篡改)
2)密文鏈接模式--CBC:應(yīng)用最廣泛。明文加密前先與前面的密文進(jìn)行異或再加密,因此只要選擇不同的初始向量,相同的明文加密后產(chǎn)生的密文也不相同。但如果在加密過程中發(fā)生錯誤,則錯誤會被無限放大,最終導(dǎo)致加密失敗。適用于檢車數(shù)據(jù)完整性的消息認(rèn)證碼MAC。
3)密文反饋模式--CFB:初始化一個向量,加密后與第一個分組進(jìn)行異或產(chǎn)生第一組密文,之后對第一組密文加密后再與第二個分組進(jìn)行異或取得第二組密文,以此類推。這種作法,即使明文相同,產(chǎn)生的密文也不同,但也會誤差傳遞。用于檢查發(fā)現(xiàn)明文密文的篡改。
4)輸出反饋模式--OFB:與CFB類似,無誤差傳送問題,對明文的主動攻擊是可能的,安全性較CFB差,適用于加密冗余性較大的數(shù)據(jù),如語音和圖像。

B、流密碼(序列密碼):加密時每次加密一位或一個字節(jié)的明文,對系統(tǒng)資源要求極低,常用于手機(jī)應(yīng)用平臺,它的實現(xiàn)簡單,便于硬件技術(shù),加解密速度快,錯誤傳播率低,但對錯誤的產(chǎn)生不夠敏感。常用算法有RC4,SEAL。
流密碼分為:
1)同步流密碼:信息在發(fā)送和接收時,同步進(jìn)行加解密操作,明文與密文一一對應(yīng),密文內(nèi)容如果被篡改,會導(dǎo)致同步失敗,則密文解密失敗。同步流密碼的重要特點(diǎn)就是,如果一個密文位發(fā)生變化,只會影響這一位密文的恢復(fù),對后續(xù)密文無影響。這樣也會導(dǎo)致攻擊者選擇性的對密文進(jìn)行改動,因此同步流密碼具有同步性、無錯誤傳遞性、主動攻擊性三種特征。適用于對音頻、視頻提供版權(quán)保護(hù)。
2)自同步流密碼:是一種由記憶變換的密碼,每個密鑰與已產(chǎn)生的固定數(shù)量的密文位有關(guān),密鑰由已生成的密文決定。如果一個密文位發(fā)生變化,這個變化會影響后續(xù)有限位(如n位)的密文位的正確解密。所以,自同步流密碼有錯誤傳遞的現(xiàn)象。但是,在接收了n為正確密文字符后,密碼自身又會實現(xiàn)重新同步。自同步流密碼的密碼分析更困難,安全性更高。有自同步性,錯誤傳遞有限性,主動攻擊性及明文統(tǒng)計擴(kuò)散性四種特征。

三、算法介紹
1、Base64
Base64是一種基于64個字符的編碼算法,是一種以任意8位字節(jié)序列組合的描述形式,這種形式不易被人直接識別。Base64算法的轉(zhuǎn)換類似于古典加密算法中的電表置換算法,通過一個字符映射表對原數(shù)據(jù)進(jìn)行轉(zhuǎn)換。經(jīng)過Base64編碼后的數(shù)據(jù)會比原始數(shù)據(jù)略長,為原來的4/3倍,經(jīng)過Base64編碼后的字符串的字符數(shù)是以4位單位的整數(shù)倍。如果編碼后的字符數(shù)不足4的整數(shù)倍,需要補(bǔ)位,Base64的字符映射表中用于補(bǔ)位的符號是“=”,因此看到字符串末尾有等號,就會聯(lián)想到Base64的算法。
Base64算法的編碼、解碼操作可以作為加解密操作,字符映射表可以作為密鑰,為什么他不能叫做加密算法呢?因為Base64的算法公開沒有問題,但是充當(dāng)密鑰的字符映射表也公開了,相當(dāng)于把密鑰進(jìn)行公開了,自然無法作為加密算法了,而且Base64算法的加密強(qiáng)度并不高。雖然Base64不能作為加密算法,但他常作為密鑰、密文、證書的一種通用存儲編碼格式,與加密算法形影不離。

2、消息摘要算法(驗證數(shù)據(jù)完整性)
散列函數(shù)的單向性(通過散列函數(shù)可以獲得對應(yīng)的散列值,但不可通過該散列值反推其原始信息)使其能夠用于校驗數(shù)據(jù)的完整性,任何消息經(jīng)過散列函數(shù)處理后,都會獲得唯一的散列值,這一過程稱為“消息摘要”,其散列值稱為“數(shù)字指紋”,其算法稱為“消息摘要算法”。數(shù)字簽名是使用消息摘要算法獲得數(shù)字指紋。
消息摘要算法主要分為三大類:MD(Message Digest,消息摘要算法)、SHA(Secure Hash Algorithm,安全散列算法)和MAC(Message Authentication Code,消息認(rèn)證碼算法)
A、MD算法家族
MD5是典型的消息摘要算法,其前身有MD2,MD3,MD4,它由MD4,MD3,MD2算法改進(jìn)而來。這種算法需要獲得一個隨機(jī)長度的信息,并產(chǎn)生一個128位的信息摘要,并將這個128位的二進(jìn)制摘要信息換算成十六進(jìn)制,就得到一個32位的字符串,所以大部分MD5算法的數(shù)字指紋都是32位的十六進(jìn)制字符串。
B、SHA算法家族
SHA算法家族有SHA-1,SHA-224,SHA-256,SHA-384,SHA-512(通常將后四種算法稱為SHA-2算法)。SHA算法是在MD4算法基礎(chǔ)上演進(jìn)而來,通過SHA算法能獲得一個固定長度的摘要信息,但若輸入的消息不同,則與其相對應(yīng)的摘要信息的差異概率很高,因此要找到兩組不同的信息對應(yīng)相同的消息摘要,從理論上來說很困難。與MD算法相比,摘要長度更長,安全性更高。
C、MAC算法家族
MAC算法結(jié)合了MD5和SHA算法的優(yōu)勢,并加入密鑰的之處,是一種更為安全的消息摘要算法。

3、循環(huán)冗余校驗(奇偶校驗碼)算法--CRC算法
CRC(Cyclic Redundancy Check,循環(huán)冗余校驗)是可以根據(jù)數(shù)據(jù)產(chǎn)生簡短固定位數(shù)的一種散列函數(shù),主要用于檢測/校驗數(shù)據(jù)傳輸/保存后出現(xiàn)的錯誤。生成的散列值在傳輸或存儲之前計算出來并附加到數(shù)據(jù)后面,在使用數(shù)據(jù)之前,對數(shù)據(jù)的完整性做校驗。一般來說,循環(huán)冗余校驗的值都是32位的二進(jìn)制數(shù),以8位十六進(jìn)制字符串形式表示。他編碼解碼方法簡單,檢錯糾錯能力強(qiáng),在通信領(lǐng)域廣泛用于實現(xiàn)差錯控制。
CRC算法與消息摘要算法一樣,屬于散列函數(shù),但他并不屬于加密算法。

4、對稱加密算法
對稱加密算法,解密算法是加密算法的逆運(yùn)算,加密密鑰和解密密鑰相同。對稱加密算法易于理解,便于實現(xiàn),根據(jù)加密方式分為密碼和分組密碼,分組密碼又有幾種工作模式:ECB,CBC,CFB,OFB,CTR等,密鑰長度決定了加密算法的安全性。
Java6中提供了DES,DESede,AES,Blowfish,RC2,RC4算法,其中DES是對稱加密算法的代表,DESede是DES算法的變種,AES算法是DES的替代者。

5、非對稱加密算法
非對稱加密算法與對稱加密算法的主要區(qū)別在于,非對稱加密算法用于加密和解密的密鑰不同,一個公開,稱為公鑰,一個保密,稱為私鑰。這種雙鑰體系更為安全,但他的加解密速度要遠(yuǎn)遠(yuǎn)慢于對稱加密,在某些極端的情況下,會比非對稱加密慢1000倍。
非對稱加密的公鑰公開,通過非安全通道發(fā)放,私鑰保密,由發(fā)放者保留,公鑰私鑰互相對應(yīng),成對出現(xiàn),公鑰加密的數(shù)據(jù),只能用私鑰解密,反之亦可。這樣密鑰的管理就不是問題了,安全性大大保證。非對稱加密算法一般應(yīng)用在對安全性要求相當(dāng)高的領(lǐng)域,如電子商務(wù)平臺。
Tips:
由于非對稱加密算法效率低,所以一般講對稱和非對稱加密算法結(jié)合使用,使用對稱加密算法為數(shù)據(jù)加解密,而使用非對稱加密算法為對稱加密算法的密鑰進(jìn)行加解密。因為非對稱加密算法對待加密數(shù)據(jù)的長度有極為苛刻 要求,如RSA算法要求待加密數(shù)據(jù)不得大于53個字節(jié),因此非對稱加密算法主要用于交換對稱加密算法的密鑰,而非數(shù)據(jù)。
非對稱加密算法最重要的實現(xiàn)就是RSA算法。
通過RSA形成了DSA算法,DSA和RSA都是數(shù)字證書中不可或缺的兩種算法,但DSA值包含數(shù)字簽名算法,使用DSA算法的數(shù)字證書無法進(jìn)行加密通信,而RSA算法既包含加解密算法,又包含數(shù)字簽名算法。可以認(rèn)為DSA是RSA數(shù)字簽名算法實現(xiàn)的簡裝版。

四、應(yīng)用--數(shù)字證書
數(shù)字證書用于標(biāo)識網(wǎng)絡(luò)中用戶的身份,數(shù)字證書有認(rèn)證機(jī)構(gòu)(Certificate Authority,CA)簽發(fā),證書的簽發(fā)是對申請數(shù)字證書的公鑰做數(shù)字簽名,證書的驗證是對數(shù)字證書的公鑰做驗證簽名,有效期驗證。
數(shù)字證書使用相應(yīng)的加密算法保證了網(wǎng)絡(luò)應(yīng)用的安全性
1、非對稱加密算法對數(shù)據(jù)進(jìn)行加解密操作,保證數(shù)據(jù)的機(jī)密性
2、數(shù)字簽名算法對數(shù)據(jù)進(jìn)行簽名驗證操作,保證數(shù)據(jù)的完整性和抗否認(rèn)性
3、消息摘要算法對數(shù)字證書本身做摘要處理,保證數(shù)字證書的完整性

五、總結(jié)


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容