gpt4 book ai didi

c# - 尝试为 api 创建等效于 C# 签名哈希方法的 php

转载 作者:可可西里 更新时间:2023-10-31 23:34:00 27 4
gpt4 key购买 nike

我正在尝试复制用于生成签名哈希以与 API 通信的 c# 方法,但无法根据我提供的 c# 方法示例在 PHP 中重现相同的示例结果。

我正在尝试做的单词问题版本是:(来自 api 文档)

计算请求签名

一个请求签名,一个带有 SHA-1 散列码的 HMAC,是通过按顺序连接服务、方法和时间戳参数的值来计算的,然后计算一个符合 RFC 2104 的 HMAC,使用 Secret Access Key 为“ key ”。计算出的 HMAC 值必须是 base64 编码的

测试数据:

service_name = “Zoyto Fulfillment Service”
timestamp: “2010-07-21T04:33:55Z”
api_secret = “2c0774063f4bb1a10ca39ba6c806636a57d78dc3”
method = “getOrderStatus”

Result should be:
signature: “mlePFDcrTAxd+PWA6hOGGtvu2Zc=”

我有以下 C# 方法代码示例,用于创建签名哈希以进行 API 调用:

public string createSignature(string api_secret, string method, string timestamp, string service_name) { 
DateTime currentTime = DateTime.UtcNow; string toSign = service_name.ToLower() + method.ToLower() + timestamp.ToLower();
byte[] toSignBytes = Encoding.UTF8.GetBytes(toSign); byte[] secretBytes = Encoding.UTF8.GetBytes(api_secret);
HMAC signer = new HMACSHA1(secretBytes byte[] sigBytes = signer.ComputeHash(toSignBytes);
string signature = Convert.ToBase64String(sigBytes);
return signature;
}

目前,我的 php 方法如下所示:

$testSecret = '2c0774063f4bb1a10ca39ba6c806636a57d78dc3';
$testSvc = 'Zoyto Fulfillment Service';
$testStamp = strtotime('2010-07-21 04:33:55');
$method = 'getOrderStatus';

$sig = utf8_encode($testSvc.$method.$testStamp);

$hash = hash_hmac("sha1", $sig, $testSecret, true);

$sig = base64_encode($hash);
return $sig;

//returns:
//OUhgiIqxngaFm1Rquxm1lZ/3CzE=

感谢任何帮助

最佳答案

我不确定您从何处获得该 C# 代码,但它不起作用。此 PHP 代码将为您提供给定输入所需的输入。

function createSignature($api_secret, $method, $timestamp, $service_name) {
$toSign = strtolower($service_name) . strtolower($method) . strtolower($timestamp);
$sig = hash_hmac('sha1', $toSign, $api_secret, true);
return base64_encode($sig);
}

$api_secret = '2c0774063f4bb1a10ca39ba6c806636a57d78dc3';
$method = 'getOrderStatus';
$timestamp = '2010-07-21T04:33:55Z';
$service_name = 'Zoyto Fulfillment Service';

echo createSignature($api_secret, $method, $timestamp, $service_name);
// output: mlePFDcrTAxd+PWA6hOGGtvu2Zc=

注意:需要 PHP 5 >= 5.1.2 或 PECL hash >= 1.1

关于c# - 尝试为 api 创建等效于 C# 签名哈希方法的 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8129700/

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