2012-10-01 27 views
5

我在計算PHP中的相同散列時遇到了一些麻煩,因爲我在C#.NET中。如何在PHP中生成相同的標記? (來自.NET)

在C#中,我有以下幾點:

HMAC hasher = new HMACSHA256(Encoding.UTF8.GetBytes("secret")); //key 
byte[] data = hasher.ComputeHash(Encoding.UTF8.GetBytes("2012-10-01T17:48:56")); //timestamp 
Convert.ToBase64String(data); //computed token 

將會產生類似:

yBV7ZfAyT1FwO5sGEVd3aPYUfBz9geN6ghK9RO68jwo =


在PHP中,我認爲這將計算哈希方式相同:

$hmac = hash_hmac("sha256", "2012-10-01T17:48:56", "secret"); 
$hmac = base64_encode($hmac); 

但是它會產生一個很大的不同,較大的哈希:

YzgxNTdiNjVmMDMyNGY1MTcwM2I5YjA2MTE1Nzc3NjhmNjE0N2MxY2ZkODFlMzdhODIxMmJkNDRlZWJjOGYwYQ ==

回答

3

您是否嘗試過使用hash_hmac與原始二進制數據輸出?

$hmac = hash_hmac("sha256", "2012-10-01T17:48:56", "secret", true); 
$hmac = base64_encode($hmac); 

這似乎產生輸出更像.NET中的一個:

NASzFnV3Flw5ppkTIja5/aaFELPNIpfQb+kbsXCAm0Q= 
在我的情況

+0

是的,我只是試過,這是問題所在。謝謝! – Buchannon

相關問題