在go語言中使用crypto/bcrypt實現(xiàn)用戶密碼非明文存儲示例
Go  /  管理員 發(fā)布于 9個月前   504
為什么不能明文存儲密碼?
明文就是直接存儲密碼,這樣有很大的風(fēng)險,比如數(shù)據(jù)泄露,被人攻擊等問題。
所以為了避免這些問題,我們需要對密碼進(jìn)行加密存儲。
非明文存儲密碼
哈希算法
密碼哈希是一種將密碼轉(zhuǎn)換為固定長度字符串的技術(shù),這個字符串與原始密碼完全不同且不可逆。
鹽值
鹽值 (salt) 是指在進(jìn)行密碼哈希之前,向密碼添加的一段隨機數(shù)據(jù)。
通常被添加到密碼的開頭或結(jié)尾,或者插入到密碼的某個位置。
其主要目的是確保即使兩個用戶擁有相同的密碼,最終存儲在數(shù)據(jù)庫中的哈希值也會不同。
代碼實現(xiàn)
在 Go 中,我們可以使用 golang.org/x/crypto/bcrypt 庫
來處理密碼的哈希和驗證并且它內(nèi)置了鹽值的生成和管理。
示例代碼:
package main
import (
"fmt"
"log"
"golang.org/x/crypto/bcrypt"
)
// HashPassword函數(shù)將密碼進(jìn)行哈希處理
func HashPassword(password string) (string, error){
// 使用bcrypt生成密碼的哈希值
hashedPassword,err:=bcrypt.GenerateFromPassword([]byte(password),
bcrypt.DefaultCost)
if err != nil {
return "", err
}
return string(hashedPassword), nil
}
// CheckPasswordHash函數(shù)驗證輸入的密碼是否正確
func CheckPasswordHash(password, hashedPassword string) bool {
// 使用bcrypt比較密碼和哈希值
err := bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(password))
return err == nil
}
func main() {
// 假設(shè)這是用戶輸入的密碼
password := "cxcxcxpassword"
// 哈希密碼
hashedPassword, err := HashPassword(password)
if err != nil {
log.Fatalf("錯誤: %v", err)
}
fmt.Printf("原始密碼: %s\n", password)
fmt.Printf("哈希后的密碼: %s\n", hashedPassword)
// 驗證密碼
isValid := CheckPasswordHash(password, hashedPassword)
fmt.Printf("密碼驗證結(jié)果: %v\n", isValid)
}
過程:
引入包:
我們使用 golang.org/x/crypto/bcrypt 包來處理密碼的哈希和驗證。
HashPassword 函數(shù):
該函數(shù)使用 bcrypt 庫生成密碼的哈希值。
bcrypt 在內(nèi)部自動生成一個鹽值,并將其添加到密碼中進(jìn)行哈希處理。
生成的哈希值包含了鹽值,因此在驗證密碼時不需要單獨存儲鹽值。
CheckPasswordHash 函數(shù):
該函數(shù)使用 bcrypt 庫比較輸入的密碼和存儲的哈希值。
bcrypt 庫會從哈希值中提取鹽值,并使用它來驗證密碼。
總結(jié)
這就是用戶密碼的非明文存儲,密碼哈希算法可以有效地保護用戶密碼的安全,
有效防止密碼泄露,保護用戶數(shù)據(jù)安全。
123 在
Clash for Windows作者刪庫跑路了,github已404中評論 按理說只要你在國內(nèi),所有的流量進(jìn)出都在監(jiān)控范圍內(nèi),不管你怎么隱藏也沒用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最簡單的方法中評論 好久好久都沒看友情鏈接申請了,今天剛看,已經(jīng)添加。..博主 在
佛跳墻vpn軟件不會用?上不了網(wǎng)?佛跳墻vpn常見問題以及解決辦法中評論 @1111老鐵這個不行了,可以看看近期評論的其他文章..1111 在
佛跳墻vpn軟件不會用?上不了網(wǎng)?佛跳墻vpn常見問題以及解決辦法中評論 網(wǎng)站不能打開,博主百忙中能否發(fā)個APP下載鏈接,佛跳墻或極光..路人 在
php中使用hyperf框架調(diào)用訊飛星火大模型實現(xiàn)國內(nèi)版chatgpt功能示例中評論 教程很詳細(xì),如果加個前端chatgpt對話頁面就完美了..
Copyright·? 2019 侯體宗版權(quán)所有·
粵ICP備20027696號