對於PHP而言,我需要將字節數組轉換爲可用於PHP函數的字符串; hash_hmac("sha256", $payload, $key, true)
將字節數組轉換爲PHP中的字符串
$key
將起源於Guid,例如{6fccde28-de32-4c0d-a642-7f0c601d1776}
,它被轉換爲字節數組。由於hash_hmac
需要一個字符串數據和密鑰我需要轉換此字節數組沒有損失,由於不可打印的字符。
我用下面的PHP代碼:
function guidToBytes($guid) {
$guid_byte_order = [3,2,1,0,5,4,6,7,8,9,10,11,12,13,14,15];
$guid = preg_replace("/[^a-zA-Z0-9]+/", "", $guid);
$result = [];
for($i=0;$i<16;$i++)
$result[] = hexdec(substr($guid, 2 * $guid_byte_order[$i], 2));
return $result;
}
$payload = utf8_encode("Some data string");
$keyBytes = guidToBytes("6fccde28-de32-4c0d-a642-7f0c601d1776");
$key = implode(array_map("chr", $keyBytes));
$hash = hash_hmac("sha256", $payload, $key, true);
$result = base64_encode($hash);
等效代碼在C#:
var g = Guid.Parse("6fccde28-de32-4c0d-a642-7f0c601d1776");
var key = g.ToByteArray();
var data = "Some data string";
var payload = Encoding.UTF8.GetBytes(data);
using(var ha = new HMACSHA256(key)) {
var hash = ha.ComputeHash(payload);
var result = Convert.ToBase64String(hash);
}
在$key
代值會產生兩種語言同base64
輸出,剩下$key
是事這是錯誤的/不同的。
所以;如何將$keyBytes
轉換爲$key
而不丟失數據?
我已經這樣做了,但是沒有正確的字節順序$ keyBytes將會出錯...... – SorenJorgensen
;-)在2分鐘前看到它。謝謝... – SorenJorgensen