我想構(gòu)建一個(gè)登錄應(yīng)用程序,它有一個(gè)用于輸入用戶(hù)名和密碼的客戶(hù)端,以及一個(gè)服務(wù)器,然后接收用戶(hù)名和密碼。然后服務(wù)器應(yīng)該檢查它收到的密碼是否與已經(jīng)存儲(chǔ)的哈希匹配。我認(rèn)為不將未加密的密碼(僅以字符串形式)從客戶(hù)端發(fā)送到服務(wù)器是明智的,因此我已經(jīng)在客戶(hù)端使用 BCrypt 對(duì)其進(jìn)行了加密。但是現(xiàn)在我在服務(wù)器端有兩個(gè)哈希,但是 BCrypt 只提供了將明文與哈希進(jìn)行比較的方法,而不是將哈希與哈希進(jìn)行比較的方法。我現(xiàn)在應(yīng)該以明文形式將密碼發(fā)送到服務(wù)器還是有辦法比較兩個(gè)哈希值?感謝您的幫助
3 回答

Helenr
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
“挑戰(zhàn)-響應(yīng)”是您應(yīng)該在谷歌上搜索的術(shù)語(yǔ)。
原則:
在服務(wù)器端,您存儲(chǔ)了一個(gè)散列(加鹽)密碼和鹽。
客戶(hù)端首先發(fā)送登錄名。
服務(wù)器在數(shù)據(jù)庫(kù)中查找登錄的鹽并將其與隨機(jī)字符串一起發(fā)送給客戶(hù)端(這就是挑戰(zhàn))。
客戶(hù)端現(xiàn)在必須按以下方式計(jì)算加密密碼:將登錄密碼與鹽連接起來(lái)并對(duì)其進(jìn)行哈希處理。將結(jié)果與挑戰(zhàn)中的隨機(jī)字符串連接起來(lái)并對(duì)其進(jìn)行哈希處理。將結(jié)果發(fā)送到服務(wù)器。
服務(wù)器現(xiàn)在將散列密碼(存儲(chǔ)在用戶(hù)數(shù)據(jù)庫(kù)中)與隨挑戰(zhàn)一起發(fā)送的隨機(jī)字符串連接起來(lái),并計(jì)算散列值。結(jié)果必須與從客戶(hù)端收到的結(jié)果完全相同。
添加回答
舉報(bào)
0/150
提交
取消