0
我使用下面的步驟來創建一個散列將被保存在我的DB:密碼散列是不可靠的
$ret=randStrGen(100).time();
$gtch = chunk_split($a,1,'.;l89b_-');
$Thm = hash_hmac('sha512', $gtch, file_get_contents('serial.txt'));
$hash =crypt($Thm,sprintf('$2y$%02d$',4).randStrGen(22).$ret);
的主要問題是變量$hash
並不總是返回一個哈希值,而是返回*0
。所以它不可靠,我不知道爲什麼會發生這種情況?
編輯:問題迎刃而解
從隱窩()文檔:
crypt_blowfish的 - 與鹽的Blowfish散列如下: 「$ 2A $」, 「$ 2X $」 或「$ 2Y $「,一個兩位數字的成本參數」$「和字母表」.0-9A-Za-z「中的22個字符 。在salt中使用 範圍以外的字符會導致crypt()返回一個零長度的字符串。
用作鹽的我的randStrGen()實際上是使用非字母數字字符,這是問題的原因。感謝大家。
這不回答你的問題,但如果你想哈希密碼,你應該只使用'password_hash' – mpen
這是你在這裏很危險的代碼。不要**包裝自己的**串哈希,使用內置的方法,它們更安全。 – GrumpyCrouton
由於標題是「密碼哈希」:當保存密碼驗證者只使用散列函數是不夠的,只是添加鹽沒有提高安全性。相反,用隨機鹽迭代HMAC約100ms持續時間,然後用散列表保存鹽。使用諸如'PBKDF2','Rfc2898DeriveBytes','password_hash','Bcrypt','passlib.hash'或類似函數的函數。關鍵是要讓攻擊者花費大量時間通過強力查找密碼。 – zaph