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...