微服務開發
創建一個微服務項目,所有的項目微服務都在這個項目中進行,創建 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 是一種常見的哈希算法,其主要特性如下:
-
壓縮性
任意長度的數據,計算出的 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)
正文完