常用的加解密算法的優(yōu)缺點(diǎn)、應(yīng)用場(chǎng)景總結(jié)

常用的加解密算法的優(yōu)缺點(diǎn)、應(yīng)用場(chǎng)景總結(jié)

一、加解密的基礎(chǔ)知識(shí)

1、對(duì)稱(chēng)密鑰加密

????對(duì)稱(chēng)密鑰加密(一個(gè)密鑰),也叫做共享密鑰加密或機(jī)密密鑰加密,使用發(fā)件人和收件人共同擁有的單個(gè)密鑰。這種密鑰既用于加密,也用于解密,叫做機(jī)密密鑰。對(duì)稱(chēng)密鑰加密是加密大量數(shù)據(jù)的一種行之有效的方法。

????對(duì)稱(chēng)密鑰加密有許多種算法如DES,RC4,IDEA等,但所有這些算法都有一個(gè)共同的目的:以可還原的方式將明文(未加密的數(shù)據(jù))轉(zhuǎn)換為暗文。暗文使用加密密鑰編碼,對(duì)于沒(méi)有解密密鑰的任何人來(lái)說(shuō)它都是沒(méi)有意義的。由于對(duì)稱(chēng)密鑰加密在加密和解密時(shí)使用相同的密鑰,所以這種加密過(guò)程的安全性取決于是否有未經(jīng)授權(quán)的人獲得了對(duì)稱(chēng)密鑰。

????衡量對(duì)稱(chēng)算法優(yōu)劣的主要尺度是其密鑰的長(zhǎng)度。密鑰越長(zhǎng),在找到解密數(shù)據(jù)所需的正確密鑰之前必須測(cè)試的密鑰數(shù)量就越多。需要測(cè)試的密鑰越多,破解這種算法就越困難。

2、公鑰加密

????公鑰加密使用兩個(gè)密鑰:一個(gè)公鑰和一個(gè)私鑰,這兩個(gè)密鑰在數(shù)學(xué)上是相關(guān)的。為了與對(duì)稱(chēng)密鑰加密相對(duì)照,公鑰加密有時(shí)也叫做不對(duì)稱(chēng)密鑰加密。在公鑰加密中,公鑰可在通信雙方之間公開(kāi)傳遞,或在公用儲(chǔ)備庫(kù)中發(fā)布,但相關(guān)的私鑰是保密的。只有使用私鑰才能解密用公鑰加密的數(shù)據(jù)。使用私鑰加密的數(shù)據(jù)只能用公鑰解密。下圖中,發(fā)件人擁有收件人的公鑰,并用它加密了一封郵件,但只有收件人掌握解密該郵件的有關(guān)私鑰。

公鑰、私鑰兩個(gè)有什么聯(lián)系呢?

????簡(jiǎn)單的說(shuō)就是,通過(guò)公鑰加密的數(shù)據(jù),只能通過(guò)私鑰解開(kāi)。通過(guò)私鑰加密的數(shù)據(jù),只能通過(guò)公鑰解開(kāi)。

????公鑰算法的主要局限在于,這種加密形式的速度相對(duì)較低。實(shí)際上,通常僅在關(guān)鍵時(shí)刻才使用公鑰算法,如在實(shí)體之間交換對(duì)稱(chēng)密鑰時(shí),或者在簽署一封郵件的散列時(shí)(散列是通過(guò)應(yīng)用一種單向數(shù)學(xué)函數(shù)獲得的一個(gè)定長(zhǎng)結(jié)果,對(duì)于數(shù)據(jù)而言,叫做散列算法)。將公鑰加密與其它加密形式(如對(duì)稱(chēng)密鑰加密)結(jié)合使用,可以?xún)?yōu)化性能,如數(shù)字簽名和密鑰交換。

3、單向散列算法

????散列,也稱(chēng)為散列值或消息摘要 ,是一種與基于密鑰(對(duì)稱(chēng)密鑰或公鑰)的加密不同的數(shù)據(jù)轉(zhuǎn)換類(lèi)型。散列就是通過(guò)把一個(gè)叫做散列算法的單向數(shù)學(xué)函數(shù)應(yīng)用于數(shù)據(jù),將任意長(zhǎng)度的一塊數(shù)據(jù)轉(zhuǎn)換為一個(gè)定長(zhǎng)的、不可逆轉(zhuǎn)的數(shù)字,其長(zhǎng)度通常在128~256位之間。所產(chǎn)生的散列值的長(zhǎng)度應(yīng)足夠長(zhǎng),因此使找到兩塊具有相同散列值的數(shù)據(jù)的機(jī)會(huì)很少。如發(fā)件人生成郵件的散列值并加密它,然后將它與郵件本身一起發(fā)送。而收件人同時(shí)解密郵件和散列值,并由接收到的郵件產(chǎn)生另外一個(gè)散列值,然后將兩個(gè)散列值進(jìn)行比較。如果兩者相同,郵件極有可能在傳輸期間沒(méi)有發(fā)生任何改變。

數(shù)字簽名:結(jié)合使用公鑰與散列算法

????數(shù)字簽名是郵件、文件或其它數(shù)字編碼信息的發(fā)件人將他們的身份與信息綁定在一起(即為信息提供簽名)的方法。對(duì)信息進(jìn)行數(shù)字簽名的過(guò)程,需要將信息與由發(fā)件人掌握的秘密信息一起轉(zhuǎn)換(使用私鑰)為叫做簽名的標(biāo)記。數(shù)字簽名用于公鑰環(huán)境(任何人都可以擁有)中,它通過(guò)驗(yàn)證發(fā)件人確實(shí)是他或她所聲明的那個(gè)人,并確認(rèn)收到的郵件與發(fā)送的郵件完全相同。

????散列算法處理數(shù)據(jù)的速度比公鑰算法快得多。散列數(shù)據(jù)還縮短了要簽名的數(shù)據(jù)的長(zhǎng)度,因而加快了簽名過(guò)程。

????密鑰交換:結(jié)合使用對(duì)稱(chēng)密鑰與公鑰

????對(duì)稱(chēng)密鑰算法非常適合于快速并安全地加密數(shù)據(jù)。但其缺點(diǎn)是,發(fā)件人和收件人必須在交換數(shù)據(jù)之前先交換機(jī)密密鑰。結(jié)合使用加密數(shù)據(jù)的對(duì)稱(chēng)密

二、常用的幾種加密方式

1、MD5 加密(散列算法)

? ? ?(1)、概念

?????????? MD5是一種基于哈希函數(shù)的單向加密算法,只能加密、無(wú)法解密,它是把一個(gè)任意長(zhǎng)度的字節(jié)串變換成一定長(zhǎng)的大整數(shù)。請(qǐng)注意我使用了"字節(jié)串"而不是"字符串"這個(gè)詞,是因?yàn)檫@種變換只與字節(jié)的值有關(guān),與字符集或編碼方式無(wú)關(guān)。MD5將任意長(zhǎng)度的"字節(jié)串"變換成一個(gè)128bit的大整數(shù),并且它是一個(gè)不可逆的字符串變換算法,換句話說(shuō)就是,即使你看到源程序和算法描述,也無(wú)法將一個(gè)MD5的值變換回原始的字符串,從數(shù)學(xué)原理上說(shuō),是因?yàn)樵嫉淖址袩o(wú)窮多個(gè),這有點(diǎn)象不存在反函數(shù)的數(shù)學(xué)函數(shù)。MD5是不可逆的只有加密沒(méi)有解密。

? ? 2)、單純的 MD5加密是不安全的,可通過(guò)撞庫(kù)的方式來(lái)暴力破解出來(lái)的,因此可以通過(guò)多種方式來(lái)進(jìn)行加強(qiáng)

???? a.加鹽

???? 最好配合 MD5加鹽的方式來(lái)對(duì)密文進(jìn)行再次處理,即往明文中插入或拼接一個(gè)隨機(jī)的字符串,然后再進(jìn)行加密。

????????鹽值加如的代碼例子如下

????????password = [passwordstringByAppendingString:salt];????

????b.亂序

???? ????先對(duì)明文進(jìn)行md5加密,然后對(duì)密文進(jìn)行亂序

???? 3)、加密強(qiáng)度

? ? ? ? ? ?a、未加鹽:2顆星

? ? ? ? ? b、加鹽:4顆星

2、時(shí)間戳/動(dòng)態(tài)密碼 的加密

? ? ? (1)、實(shí)現(xiàn)目標(biāo)

????用戶(hù)的密碼是一定的,但是每次發(fā)送給網(wǎng)絡(luò)的密碼都不同.相同的密碼相同的加密算法,每次獲得的值不同.客戶(hù)端和服務(wù)器端的時(shí)間是相同的.

????(2)、原理

??? 客戶(hù)端和服務(wù)器端依時(shí)間為基準(zhǔn)采用相同的加密算法

? ? (3)、實(shí)現(xiàn)細(xì)節(jié)

? ? ? ? 客戶(hù)端和服務(wù)器端要求時(shí)間一致,時(shí)間精度越高,越安全

????? ? 假如約定網(wǎng)絡(luò)請(qǐng)求延時(shí)3秒

????客戶(hù)端: a. 對(duì)請(qǐng)求參數(shù)one進(jìn)行一次AES對(duì)稱(chēng)加密(或者其他的對(duì)稱(chēng)加密),后形成密文two。

? ? ? ? ? ? ? ? ? ?b.對(duì)當(dāng)前時(shí)間進(jìn)行一次md5加密后形成three時(shí)間密文

? ? ? ? ? ? ? ? ? c.將密文two與密文three進(jìn)行拼接(或其他算法),再進(jìn)行一次AES對(duì)稱(chēng)加密(或者其他對(duì)稱(chēng)加密)形成four密文。

? ? ? ? ? ? ? ? ? d.將密文four發(fā)送給服務(wù)器。

? ? 服務(wù)端: a.對(duì)收到的密文four進(jìn)行一次AES對(duì)稱(chēng)解密得到two+three的密文結(jié)合體。

? ? ? ? ? ? ? ? ? ?b.以收到的時(shí)間為基準(zhǔn)與前3秒時(shí)間遍歷成md5密文,并與結(jié)合體進(jìn)行對(duì)比,假如匹配上了,就將two密文解密出來(lái)。?

? ? ? ? ? ? ? ? ? c.對(duì)two密文進(jìn)行最后的AES對(duì)稱(chēng)加密然后就得出正確的請(qǐng)求參數(shù)

? ?( 4)、加密強(qiáng)度:5顆星

3、Base64加密(base64 是一種編碼方式,只能算是淺加密,是對(duì)稱(chēng)加密)

? ? ?(1)、概念

?????????? Base64編碼的思想是:采用64個(gè)基本的ASCII碼字符對(duì)數(shù)據(jù)進(jìn)行重新編碼。它將需要編碼的數(shù)據(jù)拆分成字節(jié)數(shù)組,以3個(gè)字節(jié)為一組,按順序排列24位數(shù)據(jù),再把這24位數(shù)據(jù)分成4組,即每組6位;再在每組的的最高位前補(bǔ)兩個(gè)0湊足一個(gè)字節(jié),這樣就把一個(gè)3字節(jié)為一組的數(shù)據(jù)重新編碼成了4個(gè)字節(jié);當(dāng)所要編碼的數(shù)據(jù)的字節(jié)數(shù)不是3的整倍數(shù),也就是說(shuō)在分組時(shí)最后一組不夠3個(gè)字節(jié),這時(shí)在最后一組填充1到2個(gè)0字節(jié),并在最后編碼完成后在結(jié)尾添加1到2個(gè)=號(hào)。

? ? ?(2)、特點(diǎn):

????- 數(shù)據(jù)加密之后,數(shù)據(jù)量會(huì)變大,變大1/3左右。

????-可進(jìn)行反向解密。

????-編碼后有個(gè)非常顯著的特點(diǎn),末尾有個(gè)=號(hào)。

? ? (3)、加密強(qiáng)度:3顆星

3、使用DES加密(對(duì)稱(chēng)加密)

???? 數(shù)據(jù)加密標(biāo)準(zhǔn)算法(Data Encryption Standard),和BASE64最明顯的區(qū)別就是有一個(gè)公有密鑰,該密鑰既用于加密、也用于解密,并且要求密鑰是一個(gè)長(zhǎng)度至少大于8位的字符串。使用DES加密、解密的核心是確保工作密鑰的安全性。

4、AES加密(對(duì)稱(chēng)加密)

? ? ?(1)、概念

? ? ? 高級(jí)加密標(biāo)準(zhǔn)Advanced Encryption Standard簡(jiǎn)稱(chēng):AES,在密碼學(xué)中又稱(chēng)Rijndael加密法,是美國(guó)聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。它是一種對(duì)稱(chēng)加密算法,這個(gè)標(biāo)準(zhǔn)也替代原先的DES標(biāo)準(zhǔn),已經(jīng)被多方分析且廣為全世界所使用。AES設(shè)計(jì)有三個(gè)密鑰長(zhǎng)度:128、192、256位,相對(duì)而言,AES的128密鑰比DES的56密鑰強(qiáng)1021倍。AES算法主要包括三個(gè)方面:輪變化、圈數(shù)和密鑰擴(kuò)展。

? ? (2)、特點(diǎn)

????AES作為新一代的數(shù)據(jù)加密標(biāo)準(zhǔn)匯聚了強(qiáng)安全性、高性能、高效率、易用和靈活,在軟件及硬件上都能快速地加解密且只需要很少的存儲(chǔ)資源等優(yōu)點(diǎn)。

? ? (3)、加密強(qiáng)度:4顆星

? ? ?5、RSA加密(非對(duì)稱(chēng)加密)

? ? ?(1)、概念

? ? ? RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的絕大多數(shù)密碼攻擊,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)。RSA的公開(kāi)密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導(dǎo)出解密密鑰在計(jì)算上是不可行的”密碼體制。通常是先生成一對(duì)RSA密鑰,其中之一是保密密鑰,由用戶(hù)保存;另一個(gè)為公開(kāi)密鑰,可對(duì)外公開(kāi),甚至可在網(wǎng)絡(luò)服務(wù)器中注冊(cè)。為提高保密強(qiáng)度,RSA密鑰至少為500位長(zhǎng),一般推薦使用1024位,這就使加密的計(jì)算量很大。RSA算法是一種非對(duì)稱(chēng)密碼算法,所謂非對(duì)稱(chēng),就是指該算法需要一對(duì)密鑰,使用其中一個(gè)加密,則需要用另一個(gè)才能解密。

????????RSA算法是非對(duì)稱(chēng)加密算法的典型代表,既能加密、又能解密。和對(duì)稱(chēng)加密算法比如DES的明顯區(qū)別在于用于加密、解密的密鑰是不同的。使用RSA算法,只要密鑰足夠長(zhǎng)(一般要求1024bit),加密的信息是不能被破解的。用戶(hù)通過(guò)https協(xié)議訪問(wèn)服務(wù)器時(shí),就是使用非對(duì)稱(chēng)加密算法進(jìn)行數(shù)據(jù)的加密、解密操作的。

????服務(wù)器發(fā)送數(shù)據(jù)給客戶(hù)端時(shí)使用私鑰(private key)進(jìn)行加密,并且使用加密之后的數(shù)據(jù)和私鑰生成數(shù)字簽名(digital

signature)并發(fā)送給客戶(hù)端??蛻?hù)端接收到服務(wù)器發(fā)送的數(shù)據(jù)會(huì)使用公鑰(public key)對(duì)數(shù)據(jù)來(lái)進(jìn)行解密,并且根據(jù)加密數(shù)據(jù)和公鑰驗(yàn)證數(shù)字簽名的有效性,防止加密數(shù)據(jù)在傳輸過(guò)程中被第三方進(jìn)行了修改。

????????客戶(hù)端發(fā)送數(shù)據(jù)給服務(wù)器時(shí)使用公鑰進(jìn)行加密,服務(wù)器接收到加密數(shù)據(jù)之后使用私鑰進(jìn)行解密。

? ? ?(2)、特點(diǎn)

?? ?- 密鑰管理的方便,計(jì)算量很大速度相對(duì)比較慢。

??? - 安全性很高,能夠抵抗到目前為止已知的絕大多數(shù)密碼攻擊。

????(3)、加密強(qiáng)度:4.5顆星

5、多種加密方式配合加密

? ? ?利用多種加密方式,按照約定的相同算法進(jìn)行配合加密解密,可以將安全程度大大提升,但永遠(yuǎn)沒(méi)有絕對(duì)安全的加密方式。

三、各個(gè)加密方法優(yōu)缺點(diǎn)、應(yīng)用場(chǎng)景 總結(jié)

免費(fèi)的iOS SDK和ipa加固和蘋(píng)果審核被拒群:289533769,群里有免費(fèi)的iOS SDK和工程的混淆加固工具,每天都分享蘋(píng)果最新提審過(guò)包策略,歡迎大家進(jìn)來(lái)一起交流一起進(jìn)步一起過(guò)包!

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

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