微服務開發
建立一個微服務專案,所有的專案微服務都在這個專案中進行,建立joyshop_srv,我們沒有建立使用者登入註冊服務,所以我們在專案目錄下再建立一個目錄user_srv 及user_srv/global(全域的物件新建和初始化)user_srv/handler(業務邏輯程式碼)user_srv/model(使用者相關的 model)user_srv/proto(使用者相關的 model)main.go 服務啟動檔案
密碼我們採用 md5 加密
1. Message Digest Algorithm 5(MD5)訊息摘要演算法
MD5 是一種常見的雜湊演算法(Hash Algorithm),其主要特性如下:
-
壓縮性
任意長度的資料,計算出的 MD5 值長度都是固定的。 -
容易計算
從原始資料計算出 MD5 值非常容易。 -
抗修改性
對原始資料進行任何修改,哪怕只是一個位元組,所產生的 MD5 值差異都很大。 -
強碰撞性
想找到兩個不同的資料,使它們具有相同的 MD5 值,非常困難。 -
不可逆性
不可反解,無法透過 MD5 值還原出原始資料。
MD5 鹽值加密
1. 加鹽的目的
為了增強 MD5 加密的安全性,防止彩虹表攻擊,通常會給原始資料添加 "salt"(鹽值)再進行 MD5 加密。
2. 加鹽方法
- 透過產生亂數和 MD5 產生字串進行組合
- 將隨機產生的 salt 值與原始密碼進行拼接後再進行 MD5 加密。
-
如:
md5( password + salt ) - 資料庫同時儲存 MD5 值和 salt 值
- 在註冊時:產生 salt、計算加鹽後的 MD5,一併存入資料庫。
- 在驗證時:取出 salt,重新加密比對 MD5 值即可。
// 設置加密參數
options := &password.Options{
SaltLen: 16,
Iterations: 100,
KeyLen: 32,
HashFunction: sha512.New,
}
// 1. 加密
salt, encodedPwd := password.Encode("your_password", options)
final := fmt.Sprintf("$pbkdf2-sha512$%s$%s", salt, encodedPwd)
// 2. 拆分(模擬從數據庫讀取)
parts := strings.Split(final, "$")
saltFromDb := parts[2]
hashFromDb := parts[3]
// 3. 驗證
ok := password.Verify("your_password", saltFromDb, hashFromDb, options)
fmt.Println("驗證是否通過:", ok)
主題測試文章,只做測試使用。發佈者:Walker,轉轉請注明出處:https://walker-learn.xyz/archives/4779