0

私はWalmart APIの統合を進めています。各API呼び出しでデジタル署名が必要です。私の秘密鍵を扱わなければならないまで、私のコードはうまくいっているようです。ここでは、デジタル署名を生成するために、私の機能は次のとおりです。すでに与えられた秘密鍵をPHPの秘密鍵リソースとして使用するにはどうすればよいですか?

//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()funcが私にエラーを与える:()openssl_sign:供給キーparamが、私は最初に、新しいキーリソースを作成

$res = openssl_pkey_new(); 
openssl_pkey_export($res, $privKey); 

を使用して、保存しようとした秘密鍵

に強制することはできません私の$ WalmartPrivateKeyを$ privKeyに設定しましたが、同じエラーが発生しました。私はopenssl_get_private_key()を使ってみましたが、もう一度何も働かなかった。

私は、公開鍵/秘密鍵の暗号化の基本を知っていますが、これは初めての機能です。

誰でもお手伝いできますか?

答えて

0

PEM形式が間違っていたため、同様の問題が発生しました。正しい始まりと終わりのマーカーがあることを確認してください: "-----始動キー-----"、 "-----終わりプライベートキー-----"。 両方のマーカーは、単語の前後に正確に5つのダッシュを付ける必要があり、単語はすべて大文字である必要があります。 幸運を祈る!

+0

これが問題でした!私のマーカは小文字なので、秘密鍵は実際にPEM形式ではありませんでした。 – RocketShip

関連する問題