何らかの理由で、このスクリプトを問題なく動作させましたが、JSON をデコードしようとすると、スクリプトがめちゃくちゃになり始めました。古いスクリプトに戻しましたが、まだ機能していません。こちらが下です。$result は 0 を返し続けます。これは、PHP ドキュメントが正しい場合、検証が失敗したことを意味します。public_key.pem が正しいかどうかを再確認しました。また、signedData と署名が送信されているかどうか、およびそれらが送信されているかどうかも確認しました。このスクリプトのどこが間違っている可能性がありますか?
<?php
$signed_data = $_POST['signedData'];
$signature = $_POST['signature'];
$fp = fopen("./public_key.pem", "r");
$cert = fread($fp, 451);
fclose($fp);
$pubkeyid = openssl_get_publickey($cert);
$signed_data = trim($signed_data);
$signature = base64_decode($signature);
$result = openssl_verify($signed_data, $signature, $pubkeyid, OPENSSL_ALGO_SHA1);
if ($result == 1) {
echo 'correct';
} else if ($result == 0) {
echo 'fail';
echo '||';
echo $pubkeyid;
echo '||';
echo $signed_data;
} else {
echo 'epic fail';
}
openssl_free_key($pubkeyid);
?>