加密的幾種算法
非對稱加密?RSA 公鑰 私鑰
散列函數(shù) -MD5(32位密鑰)-SHA1(40位密鑰) ?-SHA256(64位密鑰) -SHA512(128位密鑰)
對稱加密 DES ?3DES??AES(相對最安全的加密)。等等加密方式
寫app的時候,密碼在網(wǎng)絡(luò)上、本地存儲,都不可以使用明文,所以需要進行加密
最早使用MD5的方式進行加密,但是目前MD5已經(jīng)被破解,破解方式是通過大量的數(shù)據(jù)對比以及散列碰撞,獲取大量的數(shù)據(jù),其實MD5本身是不可被反序列化的
所以信息安全該如何保證呢?
加鹽 ? ?(注意:服務(wù)器本身不需要知道用戶的密碼是什么,只需要對比加密后的數(shù)據(jù))
-固定鹽:有安全隱患,所有人都知道鹽是什么,如果員工離職帶走了鹽,泄漏出去后,所有用戶的密碼都會被破解
-隨機鹽:比較安全 ,從服務(wù)器獲取一個隨機鹽,保存在本地,通過hmac加密算法,進行加密
隨機鹽雖然比較安全,但是有安全隱患,假如黑客截獲了你的url拿到了數(shù)據(jù),他可以模擬請求,一樣可以登錄進你的賬號,這時候我們可以設(shè)置一個時效性,通過hmac加密后的數(shù)據(jù) 拼接 時間 再進行一次md5,就可以了,大致流程如下:
客戶端擁有: 密鑰(key)、用戶名(username)、原始密碼(password)
newPassword = MD5 (hmac(password+key) + 時間戳)
服務(wù)器端擁有:?密鑰(key)、用戶名(username)、hmac(password + key)
這時候 有hmac(password + key)了,那么,只需要 在加上時間戳 進行一次MD5加密
然后對比客戶端和服務(wù)器端的進行MD5的結(jié)果是否一致,判斷是否登錄成功
那么時間戳該怎么獲取呢,因為前端獲取的本地時間有可能被更改,所以需要從服務(wù)器獲取時間,或者你使用的哪個時間進行的md5,就把這個時間傳遞給服務(wù)器,讓其加密后對比,具體看需求而定