一玩般、非對稱加密
- RSA :
+?公鑰加密,私鑰解密首繁;
+ 私鑰加密作郭,公鑰解密;
+ 只能通過因式分解來破解
二弦疮、對稱加密
- DES
- 3DES
- AES (高級密碼標準夹攒,美國國家安全局使用,iOS操作系統(tǒng)內(nèi)部使用胁塞,目前還沒有發(fā)現(xiàn)過被破解的案例)
三咏尝、哈希散列函數(shù) (摘要算法)
1、常見算法
- MD5
- SHA1
- SHA256/512
2啸罢、散列函數(shù)特點
- 算法是公開的
- 對相同的數(shù)據(jù)加密编检,得到的結果是一樣的
- 對不同的數(shù)據(jù)加密,得到的結果是一樣長的32位字符 由a-Z 0-9 組成
- 信息摘要伺糠,信息指紋蒙谓,是用來做識別的,不能反算
四训桶、iOS開發(fā)兩條原則
1、不允許在網(wǎng)絡上傳遞明文的用戶隱私信息
解決方案:
* 各種加密算法(MD5 ?AES..........)酣倾,但是有些算法并不安全舵揭,像MD5算法在網(wǎng)上隨便找個網(wǎng)站都可以輕松的反加密破解掉 ,以下提供兩種安全策略:
- 加鹽
+ 所謂的“鹽”躁锡,其實可以理解為一串又臭又長的字符串午绳,例如:UYGUYF&**%&**^*(&%&%&^TUGUYRFG^&R^&F^%^R$%ERFV^&VB&^R%^V
+ 客戶端用用戶的原始密碼拼接鹽再MD5得到的一串32位字符串發(fā)給服務端,服務端也用相同的算法得到字符串來對比結果
+ 鹽要足夠長映之,無規(guī)則拦焚,這樣才不容易被破解,鹽一般都是寫死在本地杠输,對于移動開發(fā)來說 只有iOS ?安卓 ?服務器 三個人知道
+ 弊端: 其實加鹽已經(jīng)算比較安全了赎败,但是假如某天安卓的那哥們嫌自己的工資太低,找老板想要漲工資蠢甲,老板沒批僵刮,安卓那哥們直接辭職,并把加密算法和鹽通通公布出去鹦牛,那么GG
- HMAC
+?客戶端發(fā)出登錄請求搞糕,服務器返回一個隨機值KEY,客戶端保存這個隨機值KEY至本地
+?客戶端將該隨機值KEY和用戶的密碼進行 hmac 運算曼追,遞交給服務器窍仰,服務器保存這個值( (KEY+密碼)HMAC ?),至此,注冊已完成
+ 登錄:獲取本地的密鑰 KEY礼殊,(KEY+密碼)HMAC發(fā)送至服務器驹吮,服務器取出保存的值判斷密碼是否匹配
+?好處:登錄的過程中鲫忍,黑客截獲了我們發(fā)送的數(shù)據(jù),他也只能得到 hmac 加密過后的結果钥屈,拿不到KEY悟民,反加密不出密碼,甚至連服務器也不知道真正的密碼篷就,從而保證了安全性
- HMAC 高端玩法
+ 登錄:獲取本地的密鑰 KEY射亏,(KEY+密碼)HMAC+“時間戳精確到分” ,例如:(KEY+密碼)HMAC+“201808031543”? ?發(fā)送至服務器
+?服務器判斷竭业,取出保存的值(KEY+密碼)HMAC智润,拼接“201808031544”,與客戶端發(fā)來的做匹配未辆,若不對窟绷,再用 ?(KEY+密碼)HMAC+“201808031543”做匹配
+ 好處:加密后的密文是變化的,黑客拿到密文后在兩分鐘之內(nèi)才有效咐柜,然而拿到這個密文又有卵用兼蜈?
2、在本地不允許明文的保存用戶隱私信息
解決方案:
- 保存密文至程序本地拙友,反算回明文后加載進內(nèi)存 (麻煩)
-?鑰匙串(iOS開發(fā)者的福音)
+ 蘋果“生態(tài)圈”为狸,從iOS7.0.3版本開始,蘋果開放給開發(fā)者訪問遗契!
+ 鑰匙串加密方式就是AES加密辐棒,可以將保存的密碼以明文的方式反算給你
+ 鑰匙串蘋果原生都是c語言的接口,代碼又臭又長牍蜂,但有三方框架漾根,推薦 SSkeyChain
+ 用到的參數(shù)就三個:賬號----密碼-----包名(Bundle identifier)
以下就是SSkeyChain的所有接口,簡單易用:
+ (NSArray *)allAccounts;
+ (NSArray *)accountsForService:(NSString *)serviceName;
+ (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;
+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account;
+ (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;