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

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

PHP password_hash() 顯示一些異常行為?也許我錯了?

PHP password_hash() 顯示一些異常行為?也許我錯了?

PHP
慕村225694 2023-09-08 18:19:21
我看到password_hash函數有一些不尋常的行為,也許我錯了,但請檢查一下:$var = password_hash(false, PASSWORD_DEFAULT, ['cost' => 10]);$var = password_hash(null, PASSWORD_DEFAULT, ['cost' => 10]);var_dump($var);它返回像這樣的散列字符串:string(60) "$2y$10$MCkQPQcCxL5.ERZ5pJRA.en/MolCwd015OcqNk2zh.ajpicLxONge"在我看來,它不應該只返回 false?
查看完整描述

1 回答

?
幕布斯6054654

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

如果將false或更改null為空字符串,您還將看到生成的哈希值,前導字節返回相同的結果。您可以輕松測試前導空字節:

$var = password_hash(null, PASSWORD_DEFAULT, ['cost' => 10]);

var_dump($var);


var_dump(password_verify("\0", $var));

最終var_dump()結果bool(true)顯示您確實使用密碼中的前導空字節創建了哈希。這是預期的行為,password_hash()因為它只會在出現錯誤時返回 NULL。

所以這確實不是問題,因為沒有人在密碼中使用 NULL 字節。只有當您嘗試“推出自己的”加密技術并且您通常傳遞的字符串根本不是字符串時,它才會成為問題。

即使您嘗試在字符串中設置 NULL 字節,它實際上只是一個字符串:

$hashed = password_hash('\0asdfghjkl', PASSWORD_DEFAULT, ['cost' => 10]);

var_dump($hashed);


var_dump(password_verify("\0", $hashed));

bool(false).?password_verify()_

底線

除非您試圖做一些棘手的事情,例如預先散列您的密碼,否則您在這里發現的都是設計使然。沒有人輸入除字符串以外的任何內容作為密碼(您可以仔細檢查密碼,但不要清理它們,以確保它是一個會被視為穿著吊帶腰帶的字符串),并且您永遠不應該遇到輸入 NULL 字節的情況。


查看完整回答
反對 回復 2023-09-08
  • 1 回答
  • 0 關注
  • 100 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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