
lock
前言:
依舊是可以說(shuō)很良心了,今天了解了一下加密,才發(fā)現(xiàn)其中內(nèi)容真的多,涉及具體的需求
一般常用MD5,再進(jìn)一步就是加鹽,再進(jìn)一步就是亂序,再再進(jìn)一步就是HMAC
@非對(duì)稱加密算法
RSA - 加密算法
- 公鑰加密-私鑰解密
- 私鑰加密-公鑰加密
- KEY-其實(shí)就是一個(gè)數(shù)字
- 只能通過(guò)因式分解破解
哈希(散列)函數(shù)
- MD5
- SHA1
- SHA256/512
@對(duì)稱加密算法
- DES
- 3DES
- AES
(高級(jí)密碼標(biāo)準(zhǔn),美國(guó)國(guó)家安全局使用,iOS操作系統(tǒng)內(nèi)部使用)
散列函數(shù)-特點(diǎn)
- 算法公開
- 對(duì)相同數(shù)據(jù)加密,得到的結(jié)果是一樣的
- 對(duì)于不同的數(shù)據(jù)加密,得到的結(jié)果都是定長(zhǎng)的
(32位字符a--z,0--9) - 信息摘要--信息指紋,用來(lái)做識(shí)別
- 不能反算!
散列函數(shù)-用途
- 用戶登錄 : 服務(wù)器里存儲(chǔ)的是
加密后的密碼,并不是明文密碼,用戶登錄時(shí),我們客戶端也只是發(fā)送加密后的識(shí)別碼。 - 搜索
- 版權(quán)
散列函數(shù)-破解
- 目前破解的散列只有 MD5,SHA1 也在邊緣
- 散列碰撞,不同的數(shù)據(jù)使用MD5之后,能夠得到相同結(jié)果的散列結(jié)果,這個(gè)網(wǎng)站,目前95%的正確查找率
Example->MD5& HMAC
MD5加鹽[加入一段復(fù)雜且長(zhǎng)的特殊字符串,使得MD5暴力破解數(shù)據(jù)庫(kù)無(wú)法匹配]
- 缺點(diǎn)-->鹽是寫死在程序里的,被認(rèn)為掌握,存在泄漏的危險(xiǎn)
HMAC[另類加鹽]
- 優(yōu)點(diǎn)-->給定一個(gè)密鑰
[一般從服務(wù)器獲取,在注冊(cè)時(shí)存儲(chǔ)到服務(wù)器本地、客戶端本地,客戶端僅獲取一次,這樣減小了key被攔截的機(jī)率],對(duì)明文進(jìn)行加密,并做兩次散列--32位字符,這樣的好處是,服務(wù)器隨機(jī)給,客戶端僅獲取一次,所有的開發(fā)人員都不知道,不存在認(rèn)為泄漏的潛在危險(xiǎn),也大大降低了被攔截的可能。 - 缺點(diǎn)-->如果用戶更換設(shè)備登錄,那么該設(shè)備上是不具備對(duì)應(yīng)的密鑰的,此時(shí)用戶便不能再登錄了。所以,服務(wù)器端應(yīng)該更換普通的賬戶保存方式
[賬號(hào):密鑰:加密之后的密碼->(原始密碼+KEY)HMAC<-]
HMAC客戶端登錄思路
- 1.1 用戶輸入賬號(hào)、密碼
- 1.2 本地查找密鑰
[如果沒(méi)有密鑰,向服務(wù)器獲取(對(duì)應(yīng)賬號(hào))] - 1.3 舉例:QQ的設(shè)備鎖
(異地登陸),通過(guò)判斷本地是否有密鑰,進(jìn)而判斷是否為用戶的設(shè)備,如果判斷不是用戶設(shè)備,則向之前有密鑰的手機(jī)客戶端發(fā)送是否解鎖的信息,解鎖后,服務(wù)器則向你發(fā)送新的密鑰。
使得HMAC更進(jìn)一步的安全[登錄時(shí)]
- 客戶端:
加密之后的密碼 == (原始密碼 + KEY)HMAC,再進(jìn)一步做處理,最終向服務(wù)器發(fā)送的密碼 == (加密之后的密碼 + 201807021620)MD5 - 服務(wù)器端:這時(shí)的判斷進(jìn)一步做更改,
(加密之后的密碼 + 201807021621)||(加密之后的密碼 + 201807021620),使得只有1分鐘的時(shí)效
鑰匙串訪問(wèn)
1> 蘋果的生態(tài)圈,從
iOS7.0.3版本,開放給開發(fā)者
2> 鑰匙串加密方式是AES加密,可以將保存的密碼以明文的方式反算給你
3> 蘋果原生的接口,都是C語(yǔ)言的