php 生成签名及验证签名详解

前端之家收集整理的这篇文章主要介绍了php 生成签名及验证签名详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

PHP 生成签名及验证签名

PHP;"> $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,'读取证书所需要的密码')) {
  $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,$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相关文章