網絡開發(fā)原則
- 在網絡上不允許傳輸用戶的明文隱私數(shù)據
- 在本地不允許保存用戶的明文隱私數(shù)據
分類
基于密鑰的算法,按照密鑰的特點分為以下三種:
1. 哈希(散列)函數(shù)
- MD5
- SHA1
- SHA256/512
2. 對稱加密算法 - 傳統(tǒng)加密算法
- DES - 數(shù)據加密標準(用的比較少,因為強度不夠).
- 3DES - 使用3個密鑰,對相同的數(shù)據執(zhí)行三次加密,強度增強.
- AES - 高級加密標準,目前美國國家安全局使用AES加密,蘋果的鑰匙串訪問就是使用
3. 非對稱加密算法 - 現(xiàn)代加密算法
- RSA
- 公鑰\私鑰
- 用公鑰加密,私鑰解密
- 用私鑰加密,公鑰解密
哈希(散列)函數(shù)
特點:
- 算法公開的.
- 對相同的數(shù)據加密,得到的結果是一樣的.
- 對不同的數(shù)據加密,得到的結果是定長的,MD5對不同的數(shù)據進行加密,得到的結果都是32個字符.
- 信息摘要,信息"指紋",是用來做數(shù)據識別的.
- 不能反算的.
MD5 加密
用途:
- 密碼 - 服務器是不需要知道用戶的真實密碼的!在用戶注冊的時候服務器就對密碼進行了加密處理,然后保存在數(shù)據庫!
- 搜索 - 百度關鍵詞搜索
- 版權 - 不同的數(shù)據 MD5 之后差別是非常大的!!
基本安全:
- 加"鹽" - 早期使用!因為后期修改“鹽”數(shù)據,成本比較大,牽扯到老用戶可能不更新App,就會損失大部分用戶。另一方面,程序員掌握“鹽”,如果對“鹽”數(shù)據做出修改,則會造成災難性損失。
- HMAC - 近一兩年,在國內開始使用增多! 給定一個密鑰,對明文進行密鑰拼接,并且做"兩次散列" -> 得到32位結果!
HMAC :
- 用戶在注冊的那一刻,向服務器索取 密鑰(key)!!
- 客戶端拿到KEY的這一刻,就將KEY保存在本地!!
- 切換了新的設備(換手機登錄,登錄新的已有賬號!) -- 重新找服務器獲取!!
密碼具有時效性
//如何避免
一種情況! 如果黑客 模擬你的網絡請求..不需要拿到真實密碼!用加密后的信息,也可以獲得登錄之后的權限!!
//讓我們的密碼具有時效性!! 也就是 加密過后的密碼 有時間限制!!
客戶端:
UserID = hank
Pass == (123456+KEY)HMAC == e9cdab82d48dcd37af7734b6617357e6
KEY
發(fā)送:UserID : (Pass + '201702102020')md5
服務器:
KEY
UserID = hank
密碼 = Pass == e9cdab82d48dcd37af7734b6617357e6
對比: 只要服務器當前時間或者上一分鐘 加密后的字符相等!就返回登錄成功!!
(Pass + '201702102020')md5 != (Pass + '201702102021')md5
(Pass + '201702102020')md5 == (Pass + '201702102020')md5
鑰匙串訪問
1. 蘋果的"生態(tài)圈",從 iOS7.0.3 版本開放給開發(fā)者!
2. 功能:在Mac上能夠動態(tài)生成復雜密碼,幫助用戶記住密碼!
3. 如果用戶訪問網站,記住密碼,我們還可以看到記住的密碼明文!明文記錄
4. 本身的所有接口都是 C 語言的.借助三方庫
5. 采用的加密方式是 AES 加密!