如何在 PHP 中使用已经给定的私钥作为私钥资源?

How do I use an already given private key as a private key resource in PHP?

我正在整合沃尔玛 API。他们需要每个 API 调用的数字签名。在我必须处理私钥之前,我的代码似乎一直在运行。这是我生成数字签名的函数:

//Most of this code is from a Walmart API sample
function _GetWalmartAuthSignature($URL, $RequestMethod, $TimeStamp, $ConsumerId) {
    $WalmartPrivateKey = {given PEM formatted string};
    //Construct the authentication data we need to sign
    $AuthData = $ConsumerId."\n";
    $AuthData .= $URL."\n";
    $AuthData .= $RequestMethod."\n";
    $AuthData .= $TimeStamp."\n";

//THIS METHOD IS RETURNING FALSE!!!!
$PrivateKey = openssl_pkey_get_private($WalmartPrivateKey);

//Sign the data using sha256 hash
defined("OPENSSL_ALGO_SHA256") ? $Hash = OPENSSL_ALGO_SHA256 : $Hash = "sha256";
if (!openssl_sign($AuthData, $Signature, $privKey, $Hash)) {
    return null;
}

//Encode the signature and return
return base64_encode($Signature);

}

openssl_pkey_get_private() 函数一直返回 false。那么我的 openssl_sign() func 给了我错误: openssl_sign(): supplied key param cannot be coerced into a private key

我首先尝试使用

创建一个新的密钥资源
$res = openssl_pkey_new(); 
openssl_pkey_export($res, $privKey);

然后将我的 $WalmartPrivateKey 保存到 $privKey,但我得到了同样的错误。我尝试使用 openssl_get_private_key(),但再次无效。

我只知道 public/private 密钥加密的最基础知识,这是我第一次使用这些功能。

谁能帮帮我?

我也遇到过类似的问题,是因为PEM格式不对。确保您有正确的开始和结束标记: “-----开始私钥-----”,“-----结束私钥-----”。 两个标记的单词前后必须恰好有 5 个破折号,并且单词必须全部大写。 祝你好运!