Go工程師體系課 005

7次閱讀

微服務開發

創建一個微服務項目,所有的項目微服務都在這個項目中進行,創建 joyshop_srv,我們無創建用戶登錄註冊服務,所以我們在項目目錄下再創建一個目錄
user_srvuser_srv/global(全局的對象新建和初始化)
user_srv/handler(業務邏輯代碼)
user_srv/model(用戶相關的 model)
user_srv/proto(用戶相關的 model)
main.go 服務啓動文件

密碼我們採用 md5 加密

1. Message Digest Algorithm 5(MD5)信息摘要算法

MD5 是一種常見的哈希算法,其主要特性如下:

  1. 壓縮性
    任意長度的數據,計算出的 MD5 值長度都是固定的。

  2. 容易計算
    從原始數據計算出 MD5 值非常容易。

  3. 抗修改性
    對原數據進行任何修改,哪怕只是一個字節,所產生的 MD5 值差異都很大。

  4. 強碰撞性
    想找到兩個不同的數據,使它們具有相同的 MD5 值,非常困難。

  5. 不可逆性
    不可反解,無法通過 MD5 值還原出原始數據。

MD5 鹽值加密

1. 加鹽的目的

爲了增強 MD5 加密的安全性,防止彩虹表攻擊,通常會給原始數據添加 “salt”(鹽值)再進行 MD5 加密。

2. 加鹽方法

  1. 通過生成隨機數和 MD5 生成字符串進行組合

  2. 將隨機生成的 salt 值與原始密碼進行拼接後再進行 MD5 加密。

  3. 如:md5(password + salt)

  4. 數據庫同時存儲 MD5 值和 salt 值

  5. 在註冊時:生成 salt、計算加鹽後的 MD5,一併存入數據庫。
  6. 在驗證時:取出 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)
正文完
 0