iOS散列和加密算法

iOS散列和加密算法

安全性對(duì)于一個(gè)app來說是極為重要的梢为,比如說當(dāng)一個(gè)app服務(wù)端使用明文進(jìn)行密碼存儲(chǔ)的時(shí)候轰坊,一旦用戶密碼泄露,對(duì)于用戶來說影響是極其大的肴沫,可能用戶的這個(gè)密碼在前提的平臺(tái)也在使用。所以在開發(fā)中我們需要對(duì)一些重要的信息比如用戶隱私進(jìn)行加密悲幅。

總的來說站蝠,在安全性上,我們可以從幾個(gè)方面入手:

  1. app代碼層面上的安全郁副。
    • 比如說代碼混淆豌习,代碼加密或者加殼拔疚,增加被逆向的難度既荚。
  2. 網(wǎng)絡(luò)傳輸前后的安全
    • 盡量使用https而不是http。
    • 無論是get還是post請(qǐng)求句各,可以理解為都是在明文傳輸晴叨。所以請(qǐng)求和響應(yīng)都可以進(jìn)行加密和簽名處理。
  3. 數(shù)據(jù)存儲(chǔ)的安全兼蕊。
    • 密碼或者其他重要信息不要在服務(wù)端或者app內(nèi)明文存儲(chǔ),而應(yīng)該是使用這些信息的哈希值或者加密哈希值后再進(jìn)行存儲(chǔ)产禾。

幾種常見的散列和加密算法

一. 哈希(散列)算法

  • 散列就是對(duì)數(shù)據(jù)信息的摘要牵啦,提煉。
  • 散列結(jié)果不可逆楞件,這保證了無法通過散列的結(jié)果推導(dǎo)出原文僧著。
  • 無論是什么數(shù)據(jù),散列后的結(jié)果長度是一樣的,比如MD5運(yùn)算后得到的都是128bit站故。
  • 對(duì)于相同的數(shù)據(jù)散列后的結(jié)果是一樣的,這保證了“唯一性”。
  • 對(duì)于不同的數(shù)據(jù)散列后的結(jié)果是不同的愈腾。存在相同的可能性岂津,但概率不大,因?yàn)閿?shù)據(jù)是有無限的,而散列結(jié)果長度是固定的橱乱,這樣導(dǎo)致肯定會(huì)存在不同數(shù)據(jù)對(duì)應(yīng)同樣散列結(jié)果的可能,但基本可以忽略不計(jì)。
  • 數(shù)據(jù)隨便一點(diǎn)點(diǎn)的改動(dòng)作瞄,散列的結(jié)果變化會(huì)很大危纫。

所以散列可以用來做數(shù)據(jù)簽名,或者說唯一性的標(biāo)識(shí)种蝶。

  1. MD5
    Message Digest Algorithm MD5(中文名為消息摘要算法第五版)
    輸出:128bit螃征。
    因?yàn)镸D5已經(jīng)被破解,所以不再推薦在重要場合使用会傲。而且已經(jīng)存在對(duì)MD5進(jìn)行窮舉的網(wǎng)站

加鹽:就是在原信息的基礎(chǔ)上裸燎,加入一段字符串泼疑,再進(jìn)行散列運(yùn)算。
這樣的做法移稳,可以在原來簡單MD5的基礎(chǔ)上会油,加大一些被窮舉出原文的難度。所以相對(duì)直接MD5,安全性會(huì)稍微高一點(diǎn)點(diǎn)都许。
但是也會(huì)存在問題嫂冻,一旦鹽泄漏,也就是加入的那段字符串泄漏桨仿,窮舉出來的可能性就會(huì)變大。
蘋果本身也不推薦我們再使用md5了钱雷,推薦我們?nèi)ナ褂肧HA256或者強(qiáng)度更高的。

image.png

  1. SHA1/256/512
    SHA1: 安全哈希算法(Secure Hash Algorithm)
    輸出: 160bit
    SHA256:
    輸出:256bit
    SHA512:
    輸出:512bit
  2. HMac
    HMac和MD5非常相似的从铲,只不過在MD5的基礎(chǔ)上澄暮,多了鹽。
    可以理解成:本來加鹽md5(message + salt)這個(gè)操作鹽是固定寫死在本地的伸辟,而HMAC中salt是動(dòng)態(tài)從服務(wù)端獲取的馍刮,然后再進(jìn)行兩次散列。這樣黑客就不容易猜出salt静稻,也增加了破解原文的難度匈辱。

Hmac算法針對(duì)所有哈希算法都通用,無論是MD5還是SHA-1押搪。采用HMAC替代我們自己的salt算法浅碾,可以使程序算法更標(biāo)準(zhǔn)化,也更安全厦画。

用途:

  • 消息摘要
    有些地方是不能進(jìn)行明文存儲(chǔ)的埂陆,比如用戶密碼等,這時(shí)候就可以使用密碼的哈希值或者加密哈希值后再去進(jìn)行存儲(chǔ)焚虱。
  • 數(shù)字簽名
    比如在在通信請(qǐng)求中懂版,我們對(duì)請(qǐng)求和響應(yīng)數(shù)據(jù)進(jìn)行散列得到散列信息,然后使用RSA進(jìn)行散列信息的加密。因?yàn)槊罔€只有服務(wù)端有薇芝,服務(wù)端拿到RSA加密的散列信息后驗(yàn)簽丰嘉,就能知道數(shù)據(jù)是否完整,有沒有被篡改過等等耍贾。
  • 查找
    因?yàn)楣5摹拔ㄒ恍浴甭沸遥钥梢阅脕懋?dāng)做數(shù)據(jù)的身份證,指紋晃听。比如通過直接對(duì)比兩個(gè)文件的哈希值砰识,就可以知道這兩個(gè)文件是不是同一個(gè)文件。
  • 版權(quán)
    也是因?yàn)椤拔ㄒ恍浴背醢撸热缒惆l(fā)布了個(gè)視頻或者文章予借,別人拿了你的視頻文章也去發(fā)布,這里就會(huì)有盜版的問題秦叛,怎么區(qū)分正版瀑粥,就是通過哈希,你先發(fā)布的狞换,所以系統(tǒng)會(huì)記錄你之前發(fā)布的視頻哈希值修噪,一比較如果兩哈希值一樣,說明后者存在盜版的問題黄琼。

二. 對(duì)稱加密

對(duì)稱加密只有一個(gè)秘鑰,明文通過秘鑰加密獲得密文;密文通過秘鑰解密獲得明文围苫。
1. DES
數(shù)據(jù)加密標(biāo)準(zhǔn),現(xiàn)在用的很少了拧揽,加密強(qiáng)度不夠腺占。
2. 3DES
使用3個(gè)秘鑰,對(duì)數(shù)據(jù)進(jìn)行3次加密饮怯,強(qiáng)度增加了嚎研,但秘鑰的存儲(chǔ)難度大大加大了。
3. AES
高級(jí)加密標(biāo)準(zhǔn)(英語:Advanced Encryption Standard论矾,縮寫:AES)杆勇,在密碼學(xué)中又稱Rijndael加密法,是美國聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)蚜退。這個(gè)標(biāo)準(zhǔn)用來替代原先的DES钻注,已經(jīng)被多方分析且廣為全世界所使用。
優(yōu)點(diǎn):加密解密速度快幅恋,適用于數(shù)據(jù)量大的場景捆交。
缺點(diǎn):秘鑰的傳輸與存儲(chǔ),一旦秘鑰泄漏品追,加密也就暴露了肉瓦。
所以一般秘鑰用RSA來加密傳輸银还。比如iOS中鑰匙串的訪問就是AES洁墙。
AES的話有五種加密模式
1.電碼本模式(Electronic Codebook Book (ECB)
2.密碼分組鏈接模式(Cipher Block Chaining (CBC))
3.計(jì)算器模式(Counter (CTR))
4.密碼反饋模式(Cipher FeedBack (CFB))
5.輸出反饋模式(Output FeedBack (OFB))
常用的是:

電話本模式(ECB)
會(huì)把數(shù)據(jù)分成幾塊,每一塊獨(dú)立加密戒财。
比如說我改了第三塊的一點(diǎn)點(diǎn)數(shù)據(jù)热监,那么ECB加密模式下,修改前前面兩塊的加密結(jié)果和修改后前面兩塊的加密結(jié)果是一樣的饮寞。只有第三塊因?yàn)閿?shù)據(jù)的修改導(dǎo)致加密的不同孝扛。

密碼分組鏈接模式(CBC)
同樣會(huì)把數(shù)據(jù)分成幾塊,但每塊存在依賴關(guān)系幽崩,比如第二塊的加密依賴于第一塊數(shù)據(jù)苦始,第三塊依賴于第二塊;
解密也存在依賴關(guān)系慌申,第二塊解密依賴于第一塊數(shù)據(jù)陌选,第三塊依賴于第二塊蹄溉。
這樣的做法咨油,保證了數(shù)據(jù)的完整性,只要一塊有問題柒爵,那么就說明數(shù)據(jù)被篡改過役电。

有一點(diǎn)要注意的是,如果是直接調(diào)用系統(tǒng)的庫進(jìn)行非對(duì)稱加密的話棉胀,最好是在函數(shù)調(diào)用前法瑟,做一些自己的加密或者混淆,否則因?yàn)槭窍到y(tǒng)的庫函數(shù)沒辦法去符號(hào)化的唁奢,很容易被逆向逮到加密前的參數(shù)霎挟。

三. 非對(duì)稱加密

RSA是目前最有影響力的公鑰加密算法,它能夠抵抗到目前為止已知的絕大多數(shù)密碼攻擊驮瞧,已被ISO推薦為公鑰數(shù)據(jù)加密標(biāo)準(zhǔn)氓扛。
RSA算法基于一個(gè)十分簡單的數(shù)論事實(shí):將兩個(gè)大素?cái)?shù)相乘十分容易,但那時(shí)想要對(duì)其乘積進(jìn)行因式分解卻極其困難论笔,因此可以將乘積公開作為加密公鑰采郎,只要兩個(gè)質(zhì)數(shù)足夠大,破解的可能性就足夠小狂魔。至少在現(xiàn)階段是沒可能因式分解出來的蒜埋。所以RSA私鑰一般是1024位,在重要場合可能是2048位最楷。
非對(duì)稱加密整份,公鑰加密待错,私鑰解密,速度相對(duì)較慢烈评,適用于數(shù)據(jù)量小的場景火俄。
比如說支付寶,使用AES對(duì)請(qǐng)求和響應(yīng)內(nèi)容進(jìn)行加密讲冠,防止內(nèi)容的泄漏瓜客。使用RSA進(jìn)行加密內(nèi)容的簽名,兩端分別加簽驗(yàn)簽竿开,防止數(shù)據(jù)的篡改谱仪。
RSA具體實(shí)現(xiàn)原理可以看一下這個(gè)博客:RSA算法原理一RSA算法原理二

最后否彩,這里是一些和加密相關(guān)的demo和工具疯攒。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市列荔,隨后出現(xiàn)的幾起案子敬尺,更是在濱河造成了極大的恐慌,老刑警劉巖肌毅,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筷转,死亡現(xiàn)場離奇詭異,居然都是意外死亡悬而,警方通過查閱死者的電腦和手機(jī)呜舒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笨奠,“玉大人袭蝗,你說我怎么就攤上這事“闫牛” “怎么了到腥?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蔚袍。 經(jīng)常有香客問我乡范,道長,這世上最難降的妖魔是什么啤咽? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任晋辆,我火速辦了婚禮,結(jié)果婚禮上宇整,老公的妹妹穿的比我還像新娘瓶佳。我一直安慰自己,他們只是感情好鳞青,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布霸饲。 她就那樣靜靜地躺著为朋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪厚脉。 梳的紋絲不亂的頭發(fā)上习寸,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音器仗,去河邊找鬼融涣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛精钮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播剃斧,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼轨香,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了幼东?” 一聲冷哼從身側(cè)響起臂容,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎根蟹,沒想到半個(gè)月后脓杉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡简逮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年球散,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片散庶。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蕉堰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出悲龟,到底是詐尸還是另有隱情屋讶,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布须教,位于F島的核電站皿渗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏轻腺。R本人自食惡果不足惜乐疆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望约计。 院中可真熱鬧诀拭,春花似錦、人聲如沸煤蚌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至筒占,卻和暖如春贪庙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翰苫。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工止邮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奏窑。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓导披,卻偏偏與公主長得像,于是被迫代替她去往敵國和親埃唯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子撩匕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 一止毕、什么是對(duì)稱加密技術(shù)? 對(duì)稱加密采用了對(duì)稱密碼編碼技術(shù)漠趁,它的特點(diǎn)是文件加密和解密使用相同的密鑰扁凛。信息接收雙方都需...
    Djbfifjd閱讀 1,884評(píng)論 2 8
  • 一谨朝、散列(哈希) 1.簡介 散列函數(shù),又稱散列算法丸边、哈希函數(shù)叠必,是一種從任何一種數(shù)據(jù)中創(chuàng)建小的數(shù)字“指紋”的方法。散...
    綠葉竹林閱讀 3,446評(píng)論 3 3
  • 1. Base64編碼 Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一妹窖,Base64就是一種基于...
    _imp_閱讀 2,979評(píng)論 1 10
  • 這篇文章主要講述在Mobile BI(移動(dòng)商務(wù)智能)開發(fā)過程中纬朝,在網(wǎng)絡(luò)通信、數(shù)據(jù)存儲(chǔ)骄呼、登錄驗(yàn)證這幾個(gè)方面涉及的加密...
    雨_樹閱讀 2,335評(píng)論 0 6
  • 這里先簡單介紹單向散列函數(shù)共苛、消息摘要和哈希碰撞的的概念 單向散列函數(shù): 將任意長度的信息轉(zhuǎn)換為較短的固定長度的值,...
    坤_7a1e閱讀 3,473評(píng)論 0 0