-1

何らかの理由で、このスクリプトを問題なく動作させましたが、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);
?>
4

1 に答える 1

2

https://bugs.php.net/bug.php?id=60936で報告されたように見える openssl のバグがあります。これは、あなたが抱えているのと同じ問題である可能性があります。

于 2012-10-23T05:14:34.677 に答える