第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Bcrypt 加密每次使用相同的輸入都不同

Bcrypt 加密每次使用相同的輸入都不同

Go
FFIVE 2023-03-29 15:27:42
使用golang.org/x/crypto/bcrypt和 GORM ( http://gorm.io/docs/ ) 我正在嘗試加密密碼。問(wèn)題是它的每次加密每次都不一樣,所以它永遠(yuǎn)無(wú)法與數(shù)據(jù)庫(kù)中的相匹配。var result []stringpassword := []byte(data.Password)encryptedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost) // different every timedb.Where(&User{Username: strings.ToLower(data.Username)}).First(&user).Pluck("password", &result)encryptionErr := bcrypt.CompareHashAndPassword(encryptedPassword, []byte(result[0]))if encryptionErr == nil { // passwords match! }我已經(jīng)確認(rèn)每次輸入的內(nèi)容都是一樣的,并且數(shù)據(jù)庫(kù)中給出的密碼是正確的。我在這里做錯(cuò)了什么?
查看完整描述

2 回答

?
白板的微信

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊

問(wèn)題是它的每次加密每次都不一樣,所以它永遠(yuǎn)無(wú)法與數(shù)據(jù)庫(kù)中的相匹配。

這是正常的 bcrypt 行為。

bcrypt 每次都返回不同的散列,因?yàn)樗鼘⒉煌碾S機(jī)值合并到散列中。這被稱為“鹽”。它可以防止人們使用“彩虹表”攻擊您的散列密碼,這是一個(gè)預(yù)先生成的表,將密碼散列映射回他們的密碼。salt 意味著密碼不是一個(gè)散列,而是 2^16 個(gè)。太多無(wú)法存儲(chǔ)。

鹽作為散列密碼的一部分存儲(chǔ)。因此bcrypt.CompareHashAndPassword(encryptedPassword, plainPassword)可以plainPassword使用相同的鹽進(jìn)行加密encryptedPassword并進(jìn)行比較。

我在這里做錯(cuò)了什么?

您正在嘗試將生成的散列密碼與存儲(chǔ)的散列密碼進(jìn)行比較。至少我當(dāng)然希望它是存儲(chǔ)在數(shù)據(jù)庫(kù)中的散列密碼。

相反,您想要的是將存儲(chǔ)的散列密碼與用戶輸入的普通密碼進(jìn)行比較。

// Normally this comes from user input and is *never* stored

plainPassword := "supersekret"


// The encrypted password is stored in the database

db.Where(&User{Username: strings.ToLower(data.Username)}).First(&user).Pluck("password", &result)

encryptedPassword := []byte(result[0])


// Check if the stored encrypted password matches "supersekret"

encryptionErr := bcrypt.CompareHashAndPassword(encryptedPassword, plainPassword)

if encryptionErr == nil {

? ? fmt.Println("Greetings Professor Falken")

} else {

? ? fmt.Println(encryptionErr)

}


查看完整回答
反對(duì) 回復(fù) 2023-03-29
?
德瑪西亞99

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊

bcrypt散列算法在設(shè)計(jì)上會(huì)在您每次調(diào)用它時(shí)生成一個(gè)不同的加密字符串(它是加鹽的)。如果您有要檢查的明文密碼和數(shù)據(jù)庫(kù)中的密文,您應(yīng)該能夠?qū)⑦@兩件事傳遞給bcrypt.CompareHashAndPassword.?調(diào)整您的代碼:


var result []string

db.Where(&User{Username: strings.ToLower(data.Username)})

? ? ? ? .First(&user)

? ? ? ? .Pluck("password", &result)


encryptionErr := bcrypt.CompareHashAndPassword([]byte(result[0]), []byte(data.Password))

您不需要bcrypt.GenerateFromPassword再打電話;正如您所注意到的,它將生成一個(gè)不同的加密密碼,并且?guī)缀醪豢赡鼙容^兩者是否相等。


查看完整回答
反對(duì) 回復(fù) 2023-03-29
  • 2 回答
  • 0 關(guān)注
  • 934 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)