gpt4 book ai didi

php - 使用 openssl sha1 -sign 和 PHP 的 openssl_sign 时,CloudFront 签名 URL 的签名不同

转载 作者:行者123 更新时间:2023-12-04 04:13:06 25 4
gpt4 key购买 nike

我正在尝试为 CloudFront 提供的 S3 存储桶创建一个签名 URL,并且正在关注 this example用 linux OpenSSL 来做。以下内容几乎直接来自示例:

  local -r signature=$(
openssl sha1 -sign "files/pk-${key_pair_id}.pem" policy.json \
| openssl base64 -A \
| tr -- '+=/' '-_~'
)

此计算的签名与 PHP example code 计算的签名不匹配,这应该是相同的。

function rsa_sha1_sign($policy, $private_key_filename) {
$signature = "";

// load the private key
$fp = fopen($private_key_filename, "r");
$priv_key = fread($fp, 8192);
fclose($fp);
$pkeyid = openssl_get_privatekey($priv_key);

// compute signature
openssl_sign($policy, $signature, $pkeyid);

// free the key from memory
openssl_free_key($pkeyid);

return $signature;
}

function url_safe_base64_encode($value) {
$encoded = base64_encode($value);
// replace unsafe characters +, = and / with
// the safe characters -, _ and ~
return str_replace(
array('+', '=', '/'),
array('-', '_', '~'),
$encoded);
}

$key_pair_id = "A...X";
$private_key_filename = "files/A...X.pem"
$signature = rsa_sha1_sign($policy, $private_key_filename);
$signature = url_safe_base64_encode($signature);

假设 $policy 包含有效的 JSON,它与 bash 示例中使用的 policy.json 文件的内容完全匹配。

PHP 示例计算了一个有效的签名,我可以确认它可以用于创建一个有效的签名 URL 来访问受限内容。

最佳答案

正如 Mike 指出的那样,Bash 和 PHP 的代码片段计算相同的签名以匹配输入。

我测试中的差异是由于一个输入在 JSON 输入的末尾包含一个换行符,而另一个则没有。当输入真正逐字节相同时,片段会生成匹配的签名。

关于php - 使用 openssl sha1 -sign 和 PHP 的 openssl_sign 时,CloudFront 签名 URL 的签名不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61374643/

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