PHPに新しいので、バイト配列をphp関数で使用できる文字列に変換する必要があります。 hash_hmac("sha256", $payload, $key, true)
バイト配列をPHPの文字列に変換する
$key
は、GUID(例:{6fccde28-de32-4c0d-a642-7f0c601d1776}
)から生成され、バイト配列に変換されます。 hash_hmac
はデータとキーの両方の文字列をとるので、印刷不可能な文字のためにこのバイト配列を損失なく変換する必要があります。 C#で
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);
等価コード:
私は、次のPHPコードを使用してい$key
に値を代入
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);
}
は、両方の言語で同じbase64
出力を生成します、事あることを$key
を残しますそれは間違っている/違います。
So; $keyBytes
をデータ損失なしで$key
に変換するにはどうすればよいですか?
私はすでにこれを行っていますが、正しいバイトオーダーがなければ$ keyBytesは間違っています... – SorenJorgensen
;-)それは2分前に見ました。ありがとう... – SorenJorgensen