2013-01-14 43 views
2

我現在正在爲此苦苦掙扎。我掃描了幾乎所有的谷歌,但我找不到正確的腳本,如何創建一個128位密鑰的HMAC-SHA-256算法。使用128位密鑰創建HMAC-SHA-256算法

它應該是如此簡單:

$algo = 'sha256'; 
$file = 'file.txt'; 
$key = '1234567890abcdef1234567890abcdef'; 
echo hash_hmac_file ($algo, $file, $key); 

file.txt僅包含8個零()。

輸出必須是FF365893D899291C3BF505FB3175E880,但我只是不明白如何?

我已經嘗試了多種散列算法,但它們都沒有返回必要的值。我在這裏做錯了什麼,以及如何解決它?

我也試過this解決方案,但它仍然出錯。

我需要這個連接銀行,他們提供these test data開始。


最終的答案:

echo 'FF365893D899291C3BF505FB3175E880<br />'; 
$algo = 'sha256'; $file = 'file.txt'; $key = '1234567890abcdef1234567890abcdef'; 
echo substr(strtoupper(hash_hmac_file($algo, $file, pack("H*" , $key))), 0, 32); 
+0

究竟是什麼錯誤? –

+0

我無法弄清楚如何創建一個加密的mac從示例8個零,所以它完全出來'FF365893D899291C3BF505FB3175E880' – Peon

+1

也許鍵應該被視爲十六進制字節而不是字符串? – fatfredyy

回答

4

你的鑰匙需要從十六進制轉換爲二進制數據。地址:

$key = hex2bin($key); 

而且還確保您file.txt包含像新行或回車任何尾隨字符。

編輯:函數hex2bin在PHP 5.4.0中引入。對於舊版本,您可以改用

$key = pack("H*" , $key); 
+0

**致命錯誤:**調用未定義函數hex2bin()...我使用PHP 5.3 – Peon

+0

@DainisAbols,您必須使用5.4.0以前的PHP版本。我編輯答案給出了一個替代方案。 – kmkaplan

+0

Thanx m8,我找到了答案:'pack(「H *」,$ key)'for php <5.4 – Peon