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://www.walker-learn.xyz/archives/4779

(0)
Walker的頭像Walker
上一篇 2025年11月25日 05:00
下一篇 2025年11月25日 03:00

相關推薦

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

    區塊作用域繫結 之前的變數宣告 `var` 無論在哪裡宣告,都會被視為作用域頂部宣告。由於函式是一等公民,因此順序通常是 `function 函式名稱()`、`var 變數`。 區塊宣告 區塊宣告用於宣告在指定區塊的作用域之外無法存取的變數。區塊作用域存在於: 函式內部 區塊中(字元 `{` 和 `}` 之間的區域) 暫時性死區 JavaScript 引擎在掃描程式碼發現變數宣告時,要麼會將它們提升至作…

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

    查詢的倒排索引 1. 什麼是倒排索引? 倒排索引(Inverted Index)是一種資料結構,用於快速查找包含特定詞彙的文件。它是搜尋引擎的核心技術之一。 1.1 基本概念 正排索引:文件 ID → 文件內容(詞列表) 倒排索引:詞 → 包含該詞的文件 ID 列表 1.2 為什麼叫"倒排"? 倒排索引將傳統的"文件包含哪些詞"的關係倒轉為"詞出現在哪些文件…

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

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

    個人 2025年11月25日
    30200
  • 深入理解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
  • Node深入淺出(聖思園教育) 003【學習筆記】

    WebSocket 與 SSE 總覽 WebSocket 基礎 定位:WebSocket 是一種在 HTTP 握手後升級的全雙工連線,允許用戶端與伺服器在同一 TCP 通道上雙向推送資料,省去了重複輪詢。 握手流程: 用戶端透過 Upgrade: websocket 標頭發起 HTTP 請求; 伺服器回應 101 Switching Protocols,雙方協…

    個人 2025年11月24日
    41700
簡體中文 繁體中文 English