gpt4 book ai didi

PHP 的 openssl_sign 在 Node JS 中等效

转载 作者:太空宇宙 更新时间:2023-11-03 22:59:24 26 4
gpt4 key购买 nike

我正在(慢慢地)学习 Node JS 并尝试使用它来代替我拥有的 PHP 脚本。我需要对使用 SSL 组装的字符串进行签名,以传递到 curl 请求。

在 PHP 中,我是这样做的:

$sig = '2018-08-24T17:33:41Z:abcdef:/path/to/api';

$pkeyid = openssl_pkey_get_private("file://YourMomGoesToCollege.pem");

// Sign 'sig' with private key
if(openssl_sign($sig, $signed_signature, $pkeyid, "sha256WithRSAEncryption")) {

openssl_free_key($pkeyid);

//Set curl header options ...
curl_setopt($ch, CURLOPT_HTTPHEADER,
[
"X-Apple-CloudKit-Request-SignatureV1: " . base64_encode($signed_signature),
]
);

}

所以我试图生成 $signed_signature 的等效内容,但我不确定如何继续。看起来像 Node 的 Crypto可以做类似的事情,但它的参数似乎不同。这是我最好的猜测:

const crypto = require('crypto')
const sign = crypto.createSign('SHA256')

sign.write(sig)
sign.end()

const privateKey = __dirname + 'YourMomGoesToCollege.pem'
var signedSignature = sign.sign(privateKey, 'hex')

var readyForCurl = Buffer.from(signedSignature).toString('base64')

我走在正确的道路上吗?

最佳答案

使用您的工作作为起点并进行一些小的修改,以下代码片段会打印相同的签名(base64 编码):

PHP:

$data = 'some data to sign';
$key = openssl_pkey_get_private('file://private.pem');

if(openssl_sign($data, $signature, $key, 'sha256WithRSAEncryption')) {
openssl_free_key($key);
$signature_b64 = base64_encode($signature);
echo($signature_b64."\n");
}

Node JS:

const crypto = require('crypto');
const sign = crypto.createSign('SHA256');
const fs = require('fs')

sign.write('some data to sign');
sign.end();

const key = fs.readFileSync('private.pem');
signature_b64 = sign.sign(key, 'base64');
console.log(signature_b64);

比较两者:

$ diff <(php sign.php) <(node sign.js)

显示输出是相同的。

我使用了这个资源:iotdb-crypto-example

关于PHP 的 openssl_sign 在 Node JS 中等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52009637/

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