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
上一篇 2025年11月25日 05:00
下一篇 2025年11月25日 03:00

相關推薦

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

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

    個人 2025年3月8日
    1.8K00
  • 從0到1落地微前端架構 001【學習筆記】

    微前端 js 隔離css 隔離元素隔離生命週期預載入資料通訊應用程式跳轉多層巢狀 說明 使用的是 Mermaid 的 flowchart 語法,Markdown 渲染器如 Typora、VitePress、一些 Git 平台都支援。 保留了: 基座應用 main-vue3 各子應用:child-nuxt2-home、child-vue2-job、child-vu…

    2025年4月20日
    1.5K00
  • TS珠峰 001【學習筆記】

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

    個人 2025年3月27日
    1.5K00
  • 【開篇】

    我是Walker,生於八十年代初,程式碼與生活的旅者。全端開發工程師,遊走於前端與後端的邊界,執著於技術與藝術的交會點。程式碼,是我編織夢想的語言;專案,是我刻畫未來的畫布。在鍵盤的敲擊聲中,我探索技術的無限可能,讓靈感在程式碼裡永恆綻放。深度咖啡愛好者,迷戀每一杯手沖的詩意與儀式感。在咖啡的醇香與苦澀中,尋找專注與靈感,亦如在開發的世界中追求極致與平衡。騎…

    2025年2月6日 個人
    2.2K00
  • 深入理解ES6 008【學習筆記】

    迭代器(Iterator)和產生器(Generator)這項新特性對於高效的資料處理而言是不可或缺的,你也會發現在語言的其他特性中也都有迭代器的蹤影:新的 for-of 迴圈、展開運算子 (...)、甚至連非同步程式設計都可以使用迭代器。 迭代器是一種特殊的物件,它具有一些專門為迭代過程設計的專有介面,所有的迭代器物件都有一個 next() 方法,每次呼叫都傳回一個結果對…

    個人 2025年3月8日
    1.1K00
簡體中文 繁體中文 English
歡迎🌹 Coding never stops, keep learning! 💡💻 光臨🌹