/**
* 署名を確認します
* TobeVerified 署名を検証する暗号文
* PlainText 検証する署名のプレーンテキスト
* CertFile 署名者の公開鍵証明書
* return 検証が成功した場合は true、失敗した場合は false を返します (LastErrMsg 属性から失敗の理由を取得します)
*/
関数 VerifyMsg($TobeVerified, $PlainText, $CertFile,$signature_alg=OPENSSL_ALGO_SHA1)
{
//公開鍵で署名を検証する
$fp=fopen($CertFile,"r");
もし(!$fp)
{
//echo "エラー番号:-10005、エラーの説明: ER_FIND_CERT_FAILED (証明書が見つかりません)";
false を返します
}
$pub_key=fread($fp,8192);
fclose($fp);
$res = openssl_get_publickey($pub_key);
If (1==openssl_verify($PlainText,pack("H" . strlen($TobeVerified), $TobeVerified) , $res,$signature_alg))
{
//print("www.bKjia.c0m のメッセージ: 検証が成功しました。" ");
true を返します
}
それ以外
{
//echo "エラー番号:-10021、エラーの説明: ER_VERIFY_ERROR (署名の検証に失敗しました)|".openssl_error_string();
false を返します
}
}
?>
openssl_verify には 1、0、-1 の 3 つの戻り値があります。1 を返す場合のみ、署名検証が成功したことを示します。
$signature_alg のデフォルトは OPENSSL_ALGO_SHA1 です。DSA 暗号化の場合は、OPENSSL_ALGO_DSS1 に設定する必要があります |