常用的加解密算法的優(yōu)缺點(diǎn)症歇、應(yīng)用場(chǎng)景總結(jié)
一郎笆、加解密的基礎(chǔ)知識(shí)
1、對(duì)稱密鑰加密
????對(duì)稱密鑰加密(一個(gè)密鑰)当船,也叫做共享密鑰加密或機(jī)密密鑰加密题画,使用發(fā)件人和收件人共同擁有的單個(gè)密鑰。這種密鑰既用于加密德频,也用于解密苍息,叫做機(jī)密密鑰。對(duì)稱密鑰加密是加密大量數(shù)據(jù)的一種行之有效的方法壹置。
????對(duì)稱密鑰加密有許多種算法如DES,RC4,IDEA等竞思,但所有這些算法都有一個(gè)共同的目的:以可還原的方式將明文(未加密的數(shù)據(jù))轉(zhuǎn)換為暗文。暗文使用加密密鑰編碼钞护,對(duì)于沒(méi)有解密密鑰的任何人來(lái)說(shuō)它都是沒(méi)有意義的盖喷。由于對(duì)稱密鑰加密在加密和解密時(shí)使用相同的密鑰,所以這種加密過(guò)程的安全性取決于是否有未經(jīng)授權(quán)的人獲得了對(duì)稱密鑰难咕。
????衡量對(duì)稱算法優(yōu)劣的主要尺度是其密鑰的長(zhǎng)度课梳。密鑰越長(zhǎng),在找到解密數(shù)據(jù)所需的正確密鑰之前必須測(cè)試的密鑰數(shù)量就越多余佃。需要測(cè)試的密鑰越多暮刃,破解這種算法就越困難。
2爆土、公鑰加密
????公鑰加密使用兩個(gè)密鑰:一個(gè)公鑰和一個(gè)私鑰椭懊,這兩個(gè)密鑰在數(shù)學(xué)上是相關(guān)的。為了與對(duì)稱密鑰加密相對(duì)照步势,公鑰加密有時(shí)也叫做不對(duì)稱密鑰加密氧猬。在公鑰加密中,公鑰可在通信雙方之間公開(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ì)稱密鑰時(shí)灵汪,或者在簽署一封郵件的散列時(shí)(散列是通過(guò)應(yīng)用一種單向數(shù)學(xué)函數(shù)獲得的一個(gè)定長(zhǎng)結(jié)果,對(duì)于數(shù)據(jù)而言柑潦,叫做散列算法)享言。將公鑰加密與其它加密形式(如對(duì)稱密鑰加密)結(jié)合使用,可以優(yōu)化性能渗鬼,如數(shù)字簽名和密鑰交換览露。
3、單向散列算法
????散列譬胎,也稱為散列值或消息摘要 差牛,是一種與基于密鑰(對(duì)稱密鑰或公鑰)的加密不同的數(shù)據(jù)轉(zhuǎn)換類型。散列就是通過(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ì)稱密鑰與公鑰
????對(duì)稱密鑰算法非常適合于快速并安全地加密數(shù)據(jù)。但其缺點(diǎn)是鲫构,發(fā)件人和收件人必須在交換數(shù)據(jù)之前先交換機(jī)密密鑰浓恶。結(jié)合使用加密數(shù)據(jù)的對(duì)稱密
二、常用的幾種加密方式
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)
????用戶的密碼是一定的,但是每次發(fā)送給網(wǎng)絡(luò)的密碼都不同.相同的密碼相同的加密算法,每次獲得的值不同.客戶端和服務(wù)器端的時(shí)間是相同的.
????(2)芥牌、原理
??? 客戶端和服務(wù)器端依時(shí)間為基準(zhǔn)采用相同的加密算法
? ? (3)预吆、實(shí)現(xiàn)細(xì)節(jié)
? ? ? ? 客戶端和服務(wù)器端要求時(shí)間一致,時(shí)間精度越高,越安全
????? ? 假如約定網(wǎng)絡(luò)請(qǐng)求延時(shí)3秒
????客戶端: a. 對(duì)請(qǐng)求參數(shù)one進(jìn)行一次AES對(duì)稱加密(或者其他的對(duì)稱加密)胳泉,后形成密文two拐叉。
? ? ? ? ? ? ? ? ? ?b.對(duì)當(dāng)前時(shí)間進(jìn)行一次md5加密后形成three時(shí)間密文
? ? ? ? ? ? ? ? ? c.將密文two與密文three進(jìn)行拼接(或其他算法)岩遗,再進(jìn)行一次AES對(duì)稱加密(或者其他對(duì)稱加密)形成four密文。
? ? ? ? ? ? ? ? ? d.將密文four發(fā)送給服務(wù)器凤瘦。
? ? 服務(wù)端: a.對(duì)收到的密文four進(jìn)行一次AES對(duì)稱解密得到two+three的密文結(jié)合體宿礁。
? ? ? ? ? ? ? ? ? ?b.以收到的時(shí)間為基準(zhǔn)與前3秒時(shí)間遍歷成md5密文,并與結(jié)合體進(jìn)行對(duì)比蔬芥,假如匹配上了梆靖,就將two密文解密出來(lái)。?
? ? ? ? ? ? ? ? ? c.對(duì)two密文進(jìn)行最后的AES對(duì)稱加密然后就得出正確的請(qǐng)求參數(shù)
? ?( 4)笔诵、加密強(qiáng)度:5顆星
3返吻、Base64加密(base64 是一種編碼方式,只能算是淺加密,是對(duì)稱加密)
? ? ?(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ì)稱加密)
???? 數(shù)據(jù)加密標(biāo)準(zhǔn)算法(Data Encryption Standard),和BASE64最明顯的區(qū)別就是有一個(gè)公有密鑰这难,該密鑰既用于加密舟误、也用于解密,并且要求密鑰是一個(gè)長(zhǎng)度至少大于8位的字符串姻乓。使用DES加密嵌溢、解密的核心是確保工作密鑰的安全性眯牧。
4、AES加密(對(duì)稱加密)
? ? ?(1)赖草、概念
? ? ? 高級(jí)加密標(biāo)準(zhǔn)Advanced Encryption Standard簡(jiǎn)稱:AES学少,在密碼學(xué)中又稱Rijndael加密法,是美國(guó)聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)秧骑。它是一種對(duì)稱加密算法版确,這個(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ì)稱加密)
? ? ?(1)雹锣、概念
? ? ? RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的絕大多數(shù)密碼攻擊癞蚕,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)蕊爵。RSA的公開(kāi)密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導(dǎo)出解密密鑰在計(jì)算上是不可行的”密碼體制桦山。通常是先生成一對(duì)RSA密鑰攒射,其中之一是保密密鑰,由用戶保存恒水;另一個(gè)為公開(kāi)密鑰会放,可對(duì)外公開(kāi),甚至可在網(wǎng)絡(luò)服務(wù)器中注冊(cè)钉凌。為提高保密強(qiáng)度咧最,RSA密鑰至少為500位長(zhǎng),一般推薦使用1024位,這就使加密的計(jì)算量很大矢沿。RSA算法是一種非對(duì)稱密碼算法滥搭,所謂非對(duì)稱,就是指該算法需要一對(duì)密鑰咨察,使用其中一個(gè)加密论熙,則需要用另一個(gè)才能解密。
????????RSA算法是非對(duì)稱加密算法的典型代表摄狱,既能加密脓诡、又能解密。和對(duì)稱加密算法比如DES的明顯區(qū)別在于用于加密媒役、解密的密鑰是不同的祝谚。使用RSA算法,只要密鑰足夠長(zhǎng)(一般要求1024bit)酣衷,加密的信息是不能被破解的交惯。用戶通過(guò)https協(xié)議訪問(wèn)服務(wù)器時(shí),就是使用非對(duì)稱加密算法進(jìn)行數(shù)據(jù)的加密穿仪、解密操作的席爽。
????服務(wù)器發(fā)送數(shù)據(jù)給客戶端時(shí)使用私鑰(private key)進(jìn)行加密,并且使用加密之后的數(shù)據(jù)和私鑰生成數(shù)字簽名(digital
signature)并發(fā)送給客戶端啊片≈欢停客戶端接收到服務(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)行了修改齐饮。
????????客戶端發(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加固和蘋果審核被拒群:289533769,群里有免費(fèi)的iOS SDK和工程的混淆加固工具匿辩,每天都分享蘋果最新提審過(guò)包策略腰耙,歡迎大家進(jìn)來(lái)一起交流一起進(jìn)步一起過(guò)包!