Passwords
這種pickle方法有效嗎?
所以這是我在這個論壇上的第一篇文章,如果我聽起來很愚蠢,請耐心等待。我正在使用 JavaScript 和 MongoDB 創建自己的 Web 應用程序。我將所有使用者資訊儲存在 Mongo 表中,目前這是我用來儲存密碼的雜湊算法:
function generatePassword(input) { return Buffer.from(crypto.createHash('sha256').update(input).digest('base32')).toString('hex').toUpperCase(); }
因此,從我之前的網路安全課程中回憶起,sha256 早就被破解了,因此認為它儲存密碼是不安全的。我知道這是我的 Web 應用程序,我不會遇到安全漏洞,但我想表明我有正確和安全地儲存密碼的意識和知識。因此,我認為如果我使用以下程式碼稍微更改一下程式碼:
function generatePass(input) { input = input + "455kjnr2902rug5348934"; return Buffer.from(crypto.createHash('sha256').update(input).digest('base32')).toString('hex').toUpperCase(); }
我想我的問題是,這是
一個。有效的pickle方法?如果沒有,我將如何對密碼進行加鹽?灣。有沒有更安全的方法來做到這一點?這基本上是沒用的,還是有用的?
提前感謝任何可以提供幫助的人!
Sha256 破解時間不長,但對人為生成的密碼沒什麼用。你想要一個關鍵的拉伸功能。SubtleCrypto 提供 PBKDF2(文件),這很好。其他庫可能支持 bcrypt、scrypt 或 Argon2,其中任何一個都會更好。
每個使用者的鹽應該是唯一的。這樣當兩個使用者的密碼相同時,雜湊值就會不同。這可以防止各種攻擊,例如彩虹表或查看雜湊頻率。將常量值附加到密碼不會使這些攻擊變得更加困難。