代碼如下
<?php
/**
* 驗證簽名
* TobeVerified 待驗證簽名的密文
* PlainText 待驗證簽名的明文
* CertFile 簽名者公鑰證書
* return 驗證成功返回true,失敗返回false(從LastErrMsg屬性獲取失敗原因)
*/
function VerifyMsg($TobeVerified, $PlainText, $CertFile,$signature_alg=OPENSSL_ALGO_SHA1)
{
//用公鑰驗簽
$fp=fopen($CertFile,"r");
if(!$fp)
{
//echo "Error Number:-10005, Error Description: ER_FIND_CERT_FAILED(找不到證書)";
return 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.111cn.net提示您:驗證成功"." <br>");
return true;
}
else
{
//echo "Error Number:-10021, Error Description: ER_VERIFY_ERROR(驗簽失敗)|".openssl_error_string();
return false;
}
}
?>
openssl_verify 可能有三個返回值1,0,-1,只有返回1表示驗證簽名成功。
$signature_alg 默認OPENSSL_ALGO_SHA1 ,如果是DSA加密要設置成OPENSSL_ALGO_DSS1