亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

升級使用無效 CRYPT_STD_DES 鹽生成的 PHP (<5.3.2) 密碼

升級使用無效 CRYPT_STD_DES 鹽生成的 PHP (<5.3.2) 密碼

PHP
動漫人物 2023-03-11 16:30:19
長話短說,我有一些密碼在 PHP 版本中被不正確地加鹽和散列,如果加鹽無效,允許 crypt() 函數回退到 CRYPT_STD_DES 算法。然而在 PHP 5.3.2+ 中:5.3.2 修正了 Blowfish 在無效回合上返回“失敗”字符串(“*0”或“*1”)而不是回退到 DES 的行為。造成這個問題的原因是鹽中包含“$”字符,因為它本來是一種河豚鹽(但在不知不覺中變形了)。因此,我無法手動執行以下操作: crypt($pass, "$a"); 因為那現在也不是有效的 CRYPT_STD_DES 鹽。鹽必須在“./0-9A-Za-z”范圍內。它只是按照 PHP 開發人員的預期返回“*0”。如何在較新版本的 PHP(理想情況下至少為 7.1)中驗證這些格式錯誤的密碼?
查看完整描述

3 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

作為一種解決方法,我最終實際上將舊版本的 PHP 用于單個目錄,我可以在其中調用file_get_contents()并使用舊的(錯誤的)算法檢索哈希,但在其他地方仍然使用更現代的 PHP 版本。

然而,這不是一個合適的解決方案,因為它在技術上沒有回答這個問題: “我如何在更新版本的 PHP 中驗證這些格式錯誤的密碼?”

因此,除非似乎沒有其他可能的解決方案,否則我不會將此標記為已接受的答案(但我認為為了完整性起見應該添加此答案)。


查看完整回答
反對 回復 2023-03-11
?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

找到了一個實際的解決方案。通過強制加鹽,事實證明 PHP 將無效的“$2”STD_DES 加鹽解釋為“q2”。

因此,這個問題的答案是可以在較新版本的 PHP 中驗證這些散列,方法是更改用于比較散列的鹽,使其以“q2”而不是“$2”開頭。從那里開始,可以substr_replace($str, '$', 0, 1);在執行相等性檢查時調用將新添加的“q”字符替換回“$”字符。

作為一個軼事,顯然我得到的信息是不正確的,并且哈希值是在 PHP 5.3.29 中生成的,這與文檔所說的退回到在版本 5.3.2 中修補的 STD_DES 相矛盾。


查看完整回答
反對 回復 2023-03-11
?
MM們

TA貢獻1886條經驗 獲得超2個贊

你可能正在尋找

password_hash?(?string?$password?,?int?$algo?[,?array?$options?]?)?:?string



查看完整回答
反對 回復 2023-03-11
  • 3 回答
  • 0 關注
  • 123 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號