2011-04-21 161 views
0

我哈哈我的密碼像這樣;Mysql sha256密碼哈希編輯瘋狂!

hash('sha256', $_POST['password'], date('y/m/d')) 

現在說一個'aaa'的密碼就這樣進入我的mysql表;

˜4‡mÏ°\±g¥ÂIS륌JÈ›ßWò/ ¯~èð 

現在,當我去到該行上編輯任何東西,它會忽略一些字符,並更改爲沿線的東西;

˜4‡mÏ°\±g¥ÂIS륌JÈ› 

我已經嘗試更改mysql連接,數據庫,表和個別行的所有unicode設置。我正在使用PDO和InnoDB。

我在做一些事情嗎?!?

謝謝。

回答

2

hash function的原型是:

string hash (string $algo , string $data [, bool $raw_output = false ]) 

你傳遞date('y/m/d')作爲第三個參數,導致二進制輸出,作爲字符串被解釋爲true

您可能需要十六進制輸出。你應該放棄第三個參數。您可能想以某種方式將日期集成到該字段中,這需要連接。

+0

好酷,謝謝,不知道這一點。 – Version1 2011-04-21 18:33:23

0

確保您的列有一個二進制類型,或你的哈希在你的數據庫插入之前轉換爲十六進制字符串(bin2hex(hash('sha256', …, …));

0

我是不是愚蠢?!?

是的。您不應該在phpMyAdmin中手動編輯一組字節。這不是一個字符串,你知道。

爲確保數據在DB中正常,請確保您的列是BINARY類型的,並且始終使用mysql_real_escape_string將其轉義。

+0

我正在使用預處理語句,而且我不更改密碼,當我去編輯行中的任何內容時,它會自動刪除字符。 – Version1 2011-04-21 18:31:52

+0

@ Version1你不能編輯phpMyAdmin界面中的二進制字符串 – 2011-04-21 20:03:49