2015-06-21 19 views
2

我正在與hash_hmac()在註冊生成的密鑰返回一個不同的密碼密鑰,並使用完全相同的代碼鍵返回在登錄。如何獲得一致的使用返回hash_hmac()

在註冊時的代碼使用方法是:

$hash_key = 'mL993nHbLJe8dOeC242A8W'; 
    $hmac = hash_hmac('sha256', $pass, $hash_key); 
    $hmac = substr($hmac, 0, 50); 

,並用於創建密鑰來比較的代碼是:

$hash_key = 'mL993nHbLJe8dOeC242A8W'; 
    $hmac = hash_hmac('sha256', $pass, $hash_key); 
    $hmac = substr($hmac, 0, 50); 

這裏是正在返回什麼:

53bccd32d23baf691bf9c0a01b0deaa079107a72b72f4a4c08 --- Pass Key Generated by Login 
4c30997095ad3f061246ff22d096d3537f1d9d22653f533653 --- Pass Key Retrieved which was Generated at Registration 

我使用的substr($hmac, 0, 50);隨每個註冊而不同,但總是返回50個計數。不確定這是否是一個好主意,歡迎觀點,但同樣的問題發生在有或沒有substr($hmac, 0, 50);

我也曾嘗試sha512有同樣的問題。

上面的代碼爲我工作在WAMP我的電腦上,但是當上傳到共享主機發生上述提到的問題。 Assitance認識,

皮特

+0

什麼是您傳遞給該值的$ pass? –

+0

在上面的例子中'$ pass ='!Pb57Mb56!';' – petebolduc

+0

你的主機有什麼樣的設置?我使用LAMP(Linux Mint 17.1,Apache2,最新的穩定php),它對我來說很好。 –

回答

2

解決的問題......

這個問題一整天的鬥爭它與在trim($pass) PHP函數包$pass解決後。去搞清楚。感謝所有花時間協助輸入的人。

皮特

+1

我也是昨天面對同樣的問題,但是在告訴自己閱讀手冊後http://us3.php.net/manual/en/function.mcrypt-encrypt.php很快找到了什麼問題是;必須填充零字節。我很幸運,我只是絞盡腦汁半個小時,並在此之前告訴自己:「嘿,這應該是有效的,我的邏輯是正確的。」 - - 好吧,零字節補充我,但我位回來。很高興見到你們也解決了,*歡呼*。 –

+0

從一個用戶條目引用:*此外,rtrim($ decryptedtext,「\ 0」)將是一個更好的選擇來刪除NULL填充比我的懶修剪()... *這是我用來解決我的問題。查看我的HTML源代碼後,看到了這些零字節。 –

+0

被自學成功的時候,你經常只會在遇到問題時學到一些東西......我不知道甚至有這樣的事情,比如無填充或零點咬合......大聲笑我甚至不知道我用什麼修復'trim()'直到您的評論...感謝您的意見。 – petebolduc