这篇文章主要介绍了php 生成签名及验证签名详解的相关资料,需要的朋友可以参考下
php 生成签名及验证签名
<?php
/**
* 根据原文生成签名内容
*
* @param string $data 原文内容
*
* @return string
* @author confu
*/
function sign($data)
{
$filepath = 'test.p12';
if(!file_exists($filepath)) {
return false;
}
$pkcs12 = file_get_contents($filepath);
if (openssl_pkcs12_read($pkcs12, $certs, '读取证书所需要的密码')) {
$privatekey = $certs['pkey']; //根据实际情况键值可能不同
$publickey = $certs['cert']; //根据实际情况键值可能不同
$binary_signature = "";
if (openssl_sign($data, $binarysignature, $privatekey, openssl_algo_sha1)) {
return $binarysignature;
} else {
return '';
}
} else {
return '';
}
}
/**
* 验证签名自己生成的是否正确
*
* @param string $data 签名的原文
* @param string $signature 签名
*
* @return bool
* @author confu
*/
function verifysign($data, $signature)
{
$filepath = 'test.p12';
if(!file_exists($filepath)) {
return false;
}
$pkcs12 = file_get_contents($filepath);
if (openssl_pkcs12_read($pkcs12, $certs, '读取证书所需要的密码')) {
$publickey = $certs['cert'];
$ok = openssl_verify($data, $signature, $publickey);
if ($ok == 1) {
return true;
}
}
return false;
}
/**
* 验证返回的签名是否正确
*
* @param string $data 要验证的签名原文
* @param string $signature 签名内容
*
* @return bool
* @author confu
*/
function verifyrespondsign($data, $signature)
{
$filepath = 'allinpay-pds.pem';
if(!file_exists($filepath)) {
return false;
}
$fp = fopen($filepath, "r");
$cert = fread($fp, 8192);
fclose($fp);
$pubkeyid = openssl_get_publickey($cert);
if(!is_resource($pubkeyid)) {
return false;
}
$ok = openssl_verify($data, $signature, $pubkeyid);
if ($ok == 1) {
openssl_free_key($pubkeyid);
return true;
}
return false;
}
?>
openssl_sign 默认signature_alg参数是openssl_algo_sha1
如果使用dsa加密方式需要使用openssl_algo_dss1参数
signature_alg 其他参数
openssl_algo_dss1 (integer)
openssl_algo_sha1 (integer)
openssl_algo_sha224 (integer)
openssl_algo_sha256 (integer)
openssl_algo_sha384 (integer)
openssl_algo_sha512 (integer)
openssl_algo_rmd160 (integer)
openssl_algo_md5 (integer)
openssl_algo_md4 (integer)
openssl_algo_md2 (integer)
以上就是本文的全部内容,希望对大家的学习有所帮助。
相关推荐:
php基于imap收取邮件的方法详解
php 实现文件锁与进程锁
php更改hosts文件的方法详解
以上就是php 生成签名及验证签名详解的详细内容。