寫給前端的密碼學知識

最近在做一些藍牙相關的開發,其中遇到了加密協議,之前沒接觸過這塊,sha256,AES這些東西只知道名字,也沒想到有一天會用到。眼看着10月即將過去,給自己定的一個月一篇水文的目標都快要達不到了,實在慚愧。趁着10月的尾巴,奉上這篇寫給前端的密碼學知識。

hex

摘要算法

摘要算法又稱哈希算法、散列算法。它通過一個函數,把任意長度的數據轉換爲一個長度固定的數據串(通常用16進制的字符串表示),常用的有MD5, SHA1, SHA256,SHA512等。這種算法可以用來驗證文件的有效性,比如某個文件下載下來是不是完整的,另外一種場景是,將用戶密碼存儲到數據庫中的時候,不存明文,而是存儲密碼的hash值

加鹽

由於黑客可以通過反查內容和hash之間對應的表,來破解我們的密碼,所以有了加鹽的方式來提高安全性。比如用戶的密碼是123456,MD5得到的hash是e10adc3949ba59abbe56e057f20f883e,我們在計算hash時,可以在密碼後拼接salt, 把密碼變成123456salt,然後再計算並存到數據庫裏面,這樣,即使黑客拿到了hash,也無法輕易通過反查表的方式得到密碼。

HMAC

我們在調用一些API的時候,需要驗證簽名,可能會遇到使用HMAC-SHA256方式來驗證簽名,那麼這個 HMAC-SHA256 和 SHA256 是一個東西嗎,這兩者有聯繫,但是其實不是一個東西。我們來看一個圖:

image

我們可以看到HMAC算法裏面的入參有兩個,一個secretKey,一個message,最後輸出一個MAC(message auth code)

HMAC的加密實現:HMAC (key, message) = H ( (key XOR opad ) + H( (key XOR ipad ) + message ) )

其中:
opad 是外部填充常數(0x5c5c5c…5c5c,一段十六進制常量)
ipad 是內部填充常數(0x363636…3636,一段十六進制常量)

我們可以看到,HMAC是使用了我們前面提到的摘要算法的,其中key相當於之前提到的鹽,但是HMAC通過算法讓這個過程更安全。

有了HMAC,平臺側可以把secret key發放給授權用戶,用戶調用api時,通過這個key,使用指定 的HMAC算法對內容加密,並把內容和sign一起給平臺進行校驗,如果平臺算出的sign和請求帶的sign一致,則返回正確的結果,否則就報錯。這個過程就是驗籤。

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章