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 是一種常見的哈希算法,其主要特性如下:

  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工程師體系課 001【學習筆記】

    轉型 想在短時間系統轉到Go工程理由 提高CRUD,無自研框架經驗 拔高技術深度,做專、做精需求的同學 進階工程化,擁有良好開發規範和管理能力的 工程化的重要性 高級開的期望 良好的代碼規範 深入底層原理 熟悉架構 熟悉k8s的基礎架構 擴展知識廣度,知識的深度,規範的開發體系 四個大的階段 go語言基礎 微服務開發的(電商項目實戰) 自研微服務 自研然後重…

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

    擴展對象的功能 普通對象 具有js對象所有默認內部行為的 特異對象 具有某些與默認行為不符的內部行為 標準對象 es6規範中定義的對象,Array/Date等 內建對象 腳本開始執行時存在於javascript執行環境的對象,所有標準對象都是內建對象 對象字面量語法擴展 屬性初始值的簡寫,當一個對象的屬性與本地變量同名時,不必再寫冒號和值 對象方法的簡寫語法…

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

    塊級作用域綁定 之前的變量聲明var無論在哪裡聲明的都被認為是作域頂部聲明的,由於函數是一等公民,所以順序一般是function 函數名()、var 變量。 塊級聲明 塊級聲明用於聲明在指定塊的作用域之外無法訪問的變量。塊級作用域存在於: 函數內部 塊中(字符和{和}之間的區域) 臨時死區 javascript引擎在掃描代碼發現變量聲明時,要麼將它們提升至作…

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

    解構:使用數據訪問更便捷 如果使用var、let或const解構聲明變量,則必須要提供初始化程序(也就是等號右側的值)如下會導致錯誤 // 語法錯誤 var {tyep,name} // 語法錯誤 let {type,name} // 語法錯誤 const {type,name} 使用解構給已經聲明的變量賦值,哪下 let node = { type:&qu…

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

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

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