将字节数组转换为PHP中的字符串
对于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
而不丢失数据?
请试试这个功能,一个GUID转换成二进制字符串:
function guidToBytes($guid) {
$guid_byte_order = [3, 2, 1, 0, 5, 4, 7, 6, 8, 9, 10, 11, 12, 13, 14, 15];
$guid = preg_replace("/[^a-zA-Z0-9]+/", "", $guid);
$result = [];
foreach ($guid_byte_order as $offset) {
$result[] = hexdec(substr($guid, 2 * $offset, 2));
}
return $result;
}
可以使用Chr函数在PHP
http://php.net/manual/en/function.chr.php
CHR接收输入的int并返回一个corrispondent的ASCII字符。
$strings = array_map("chr", $bytes);
$string = implode(" ", $strings);
我希望我是有帮助的
我已经做到这一点,但是不会array_map“公正”产生另阵列? 结果呢还是要拼成一个字符串? – SorenJorgensen
您可以使用implode函数来获取字符串作为结果。 $ strings = array_map(“chr”,$ bytes); $ string = implode(“”,$ strings); –
我已经这样做了,但是没有正确的字节顺序$ keyBytes将会出错...... – SorenJorgensen
;-)在2分钟前看到它。谢谢... – SorenJorgensen