golang pbkdf2加密儲存使用者密碼

2021-10-07 16:34:22 字數 1431 閱讀 8929

pbkdf2(password-based key derivation function) 是乙個用來匯出金鑰的函式,常用於生成加密的密碼。原理是通過 password 和 salt 進行 hash 加密,然後將結果作為 salt 與 password 再進行 hash,多次重複此過程,生成最終的密文。如果重複的次數足夠大(幾千數萬次),破解的成本就會變得很高。而鹽值的新增也會增加「彩虹表」攻擊的難度。

使用者密碼採用pbkdf2演算法儲存,比較安全。

package pbkdf2

import (

"crypto/rand"

"crypto/sha256"

"encoding/base64"

mathrand "math/rand"

"golang.org/x/crypto/pbkdf2"

)const (

saltminlen = 8

saltmaxlen = 32

iter = 1000

keylen = 32

)// encryptpwd 加密密碼

func encryptpwd(pwd string) (encrypt string, err error)

// 2、生成加密串

en := encryptpwdwithsalt(byte(pwd), salt)

// 3、合併鹽值

encrypt = base64.stdencoding.encodetostring(en)

return

}func randsalt() (byte, error)

return salt, nil

}func encryptpwdwithsalt(pwd, salt byte) (pwden byte)

// checkencryptpwdmatch 驗證密碼是否與加密串匹配

func checkencryptpwdmatch(pwd, encrypt string) (ok bool)

endecode, err := base64.stdencoding.decodestring(encrypt)

if err != nil

// 2、擷取加密串 固定長度

salt := endecode[keylen:]

// 3、比對

enbase64 := base64.stdencoding.encodetostring(endecode[0:keylen])

pwdenbase64 := base64.stdencoding.encodetostring(encryptpwdwithsalt(byte(pwd), salt))

ok = enbase64 == pwdenbase64

return

}

參考:

使用者密碼到底要怎麼加密儲存?

golang pbkdf2加密儲存使用者密碼

概述 pbkdf2 password based key derivation function 是乙個用來匯出金鑰的函式,常用於生成加密的密碼。原理是通過 password 和 salt 進行 hash 加密,然後將結果作為 salt 與 password 再進行 hash,多次重複此過程,生成最...

機房收費系統 新增密保功能

之前曾經和小夥伴討論過關於機房收費系統的安全性的問題,如果忘了密碼怎麼辦?於是腦洞就來了,就聯想到了qq的密保功能!於是就開始幹了 密保用來找回密碼,所以需要在資料庫user info中新增兩個字段用來放置密保問題及密保答案!找回密碼按鈕當然是放在登入窗體。使用者在設定完密保後還可以在主程式裡面找到...

Ret2Syscall繞過NX ASLR保護

ret2syscall,即控制程式執行系統呼叫,進而獲取shell。下面看看我們的vuln程式。可以看出,程式中的gets有明顯的 溢位漏洞 用gdb開啟,檢查一下檔案開啟了哪些防護 可以看出程式開啟了 nx 棧不可執行 防護,那麼,我們可以用rop繞過防護 接來下,我們利用溢位漏洞來控制程式執行s...