Làm quen với PHP Tôi cần phải chuyển đổi một mảng byte thành chuỗi có thể được sử dụng trong hàm php; hash_hmac("sha256", $payload, $key, true)
Chuyển đổi mảng byte thành chuỗi trong PHP
$key
sẽ bắt nguồn từ Hướng dẫn, nói {6fccde28-de32-4c0d-a642-7f0c601d1776}
, được chuyển đổi thành một mảng byte. Khi hash_hmac
lấy một chuỗi cho cả dữ liệu và khóa tôi cần để chuyển đổi mảng byte này mà không bị mất do các ký tự không thể in được.
Tôi đang sử dụng mã PHP sau:
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);
mã tương đương trong 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);
}
Thay giá trị trong $key
sẽ sản xuất cùng base64
đầu ra trong cả hai ngôn ngữ, để lại $key
là điều đó là sai/khác.
Vì vậy; làm cách nào để chuyển đổi $keyBytes
thành $key
mà không làm mất dữ liệu?
Tôi đã làm điều này, tuy nhiên không có thứ tự byte chính xác $ keyBytes sẽ bị sai ... – SorenJorgensen
;-) đã xem nó cách đây 2 phút. Cảm ơn... – SorenJorgensen