我在 Postgresql 中使用 pgcrypto 擴展來對資料庫中的用戶密碼存盤進行加密和加鹽,但我無法檢索它們。
具體來說,用戶的插入陳述句如下所示:
INSERT INTO Users (username, password) VALUES ('test1', crypt('Password1234', gen_salt('bf', 8)));
這很好,但是當我嘗試從資料庫中檢索時,這個查詢:
SELECT username, password FROM Users WHERE username = 'test1' AND password = crypt('Password1234', gen_salt('bf', 8));
不回傳任何結果,查詢不會失敗,只是沒有結果。
目前,我沒有使用 python 與資料庫互動(我將在未來使用)我只是在終端中使用 psql。我知道這個查詢有問題,但我不確定是什么以及如何解決它。是否有其他方式可以構建它或者我做錯了什么?謝謝你的幫助!
uj5u.com熱心網友回復:
您正在用新的鹽對密碼重新加鹽,這當然會導致與以前不同的答案。這就是加鹽的全部意義所在。
您需要在新散列中重用第一個鹽,您可以通過提供密碼散列代替gen_salt(...). (存盤的散列密碼中嵌入了鹽,crypt 知道如何提取和重用它)。
SELECT username, password FROM Users WHERE username = 'test1' AND password = crypt('Password1234', password);
但是,你為什么選擇“密碼”?一旦你驗證了哈希是正確的,那么看到它還有什么用呢?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/447402.html
標籤:PostgreSQL 哈希 河豚 pgcrypto
上一篇:根據另一列設定一列的值
