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
上一篇 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! 💡💻 光臨🌹