• 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)

  • 相关阅读:
    第1周作业
    第0次作业
    第三周作业
    随笔1
    第一次作业
    第二周作业
    第零次作业
    第四周作业
    第三周作业
    第二次作业
  • 原文地址:https://www.cnblogs.com/baocheng/p/5910449.html
Copyright © 2020-2023  润新知