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月7日 17:00
下一篇 2026年3月7日 15:00

相關推薦

  • 深入理解ES6 010【學習筆記】

    改進的陣列功能 new Array() 的怪異行為,當建構函式傳入一個數值型的值,那麼陣列的 length 屬性會被設為該值;如果傳入多個值,此時無論這些值是不是數值型的,都會變為陣列的元素。這個特性令人困惑,你不可能總是注意傳入資料的類型,所以存在一定的風險。 Array.of() 無論傳多少個參數,不存在單一數值的特例(一個參數且數值型),總是返回包含所有參數…

    個人 2025年3月8日
    1.3K00
  • Go工程師體系課 018【學習筆記】

    API 閘道與持續部署入門(Kong & Jenkins) 對應資料目錄《第 2 章 Jenkins 入門》《第 3 章 透過 Jenkins 部署服務》,整理 Kong 與 Jenkins 在企業級持續交付中的實戰路徑。即使零基礎,也能順著步驟建立出自己的閘道 + 持續部署管線。 課前導覽:什麼是 API 閘道 API 閘道位於用戶端與後端微服務…

    個人 2025年11月25日
    28600
  • 熱愛運動,挑戰極限,擁抱自然

    熱愛 在這個快節奏的時代,我們被工作、生活的壓力所包圍,常常忽略了身體的需求。而運動,不只是一種健身方式,更是一種釋放自我、挑戰極限、與自然共舞的生活態度。無論是滑雪、攀岩、衝浪,還是跑步、騎行、瑜伽,每一種運動都能讓我們找到內心的激情,感受到生命的躍動。 運動是一場自我挑戰。挑戰極限,不只是職業運動員的專屬,而是每一個熱愛運動的人都可以追求的目標。它可…

    個人 2025年2月26日
    1.5K00
  • TS珠峰 001【學習筆記】

    課程大綱 建置 TypeScript 開發環境。 掌握 TypeScript 的基礎類型、聯集類型和交集類型。 詳細類型斷言的作用和用法。 掌握 TypeScript 中函式、類別的類型宣告方式。 掌握類型別名、介面的作用和定義。 掌握泛型的應用情境,熟練應用泛型。 靈活運用條件類型、映射類型與內建類型。 建立和使用自訂義類型。 理解命名空間、模組的概念以及使…

    個人 2025年3月27日
    1.6K00
  • Go工程師體系課 protoc-gen-validate【學習筆記】

    protoc-gen-validate 簡介與使用指南 ✅ 什麼是 protoc-gen-validate protoc-gen-validate(簡稱 PGV)是一個 Protocol Buffers 外掛程式,用於在生成的 Go 程式碼中加入結構體欄位的驗證邏輯。 它透過在 .proto 檔案中加入 validate 規則,自動為每個欄位生成驗證程式碼,避免你手…

    個人 2025年11月25日
    1.4K00
簡體中文 繁體中文 English