gpt4 book ai didi

c# - 在 PHP 中将字节数组转换为字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:30 27 4
gpt4 key购买 nike

作为 PHP 新手,我需要将字节数组转换为可在 php 函数中使用的字符串; hash_hmac("sha256", $payload, $key, true)

$key 将源自一个 Guid,比如 {6fccde28-de32-4c0d-a642-7f0c601d1776},它被转换为一个字节数组。由于 hash_hmac 需要一个字符串作为数据和 key ,我需要转换这个字节数组而不因不可打印的字符而丢失。

我正在使用以下 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

最佳答案

可以在PHP中使用chr函数

http://php.net/manual/en/function.chr.php

chr 在输入中接收一个 int 并返回一个对应的 ascii 字符。

$strings = array_map("chr", $bytes);
$string = implode(" ", $strings);

希望对你有帮助

关于c# - 在 PHP 中将字节数组转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45184230/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com