Go工程師體系課 005【學習筆記】

微服務開發

建立一個微服務專案,所有的專案微服務都在這個專案中進行,建立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 是一種常見的雜湊演算法(Hash Algorithm),其主要特性如下:

  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)

主題測試文章,只做測試使用。發佈者:Walker,轉轉請注明出處:https://walker-learn.xyz/archives/4779

(0)
Walker的頭像Walker
上一篇 2026年3月10日 00:00
下一篇 2026年3月8日 15:40

相關推薦

  • Go工程師體系課 003【學習筆記】

    grpc grpc grpc-go grpc 無縫整合了 protobuf protobuf 習慣用 Json、XML 資料儲存格式的你們,相信大多都沒聽過 Protocol Buffer。 Protocol Buffer 其實是 Google 出品的一種輕量且高效的結構化資料儲存格式,效能比 Json、XML 真的強!太!多! protobuf…

    個人 2025年11月25日
    25400
  • Go工程師體系課 008【學習筆記】

    訂單及購物車 先從庫存服務中將 srv 的服務程式碼框架複製過來,搜尋取代對應的名稱(order_srv) 加密技術基礎 對稱式加密(Symmetric Encryption) 原理: 使用同一個金鑰進行加密和解密 就像一把鑰匙,既能鎖門也能開門 加密速度快,適合大量資料傳輸 使用情境: 本機檔案加密 資料庫內容加密 大量資料傳輸時的內容加密 內部系統間的快速通…

    個人 2025年11月25日
    26600
  • Go 工程師體系課 013【學習筆記】

    訂單事務 先扣庫存 後扣庫存 都會對庫存和訂單都會有影響,所以要使用分散式事務 業務(下單不對付)業務問題 支付成功再扣減(下單了,支付時沒庫存了) 訂單扣減,不支付(訂單超時歸還)【常用方式】 事務和分散式事務 1. 什麼是事務? 事務(Transaction)是資料庫管理系統中的一個重要概念,它是一組資料庫操作的集合,這些操作要麼全部成功執行,要麼全部…

    個人 2025年11月25日
    28600
  • 深入理解ES6 007【學習筆記】

    Set集合與Map集合 在js中有一個in運算子,其不需要讀取物件的值就能判斷屬性在物件中是否存在,如果存在就回傳true。但是in運算子也會檢查物件的原型,只有當物件原型為null時使用這個方法才比較穩妥。 Set集合 let set = new Set() set.add(5) set.add("5") console.log(s…

    個人 2025年3月8日
    1.3K00
  • 深入理解ES6 002【學習筆記】

    字串與正規表達式 字串與正規表達式 JavaScript 字串一直都是基於 16 位元字元編碼(UTF-16)建構而成。每 16 位元的序列是一個編碼單元(code unit),代表一個字元。length、charAt() 等字串屬性與方法都是基於這個編碼單元建構的。Unicode 的目標是為世界上每一個字元提供全球唯一的識別碼。如果我們將字元長度限制在 16 位元,碼位數量將不…

    個人 2025年3月8日
    1.9K00
簡體中文 繁體中文 English