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

时间:2017-11-19 15:56:28

标签: php encryption public-key-encryption private-key php-openssl

我正在努力整合Walmart 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()func一直返回false。那么我的openssl_sign()函数给出了错误:openssl_sign():提供的密钥参数不能被强制转换为私钥

我首先尝试使用

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

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

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

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

我有类似的问题,这是因为PEM格式错误。确保您有正确的开始和结束标记: " -----开始私钥-----"," -----结束私钥-----"。 两个标记在单词之前和之后必须正好有5个破折号,并且单词必须全部为大写。 祝你好运!