php的rsa生成签名和验证签名方法

  • 内容
  • 评论
  • 相关
//处理参数
function MakeSign_Params( $arr ) {
    ksort( $arr );
    //按字典序排序参数
    $buff = '';
    foreach ( $arr as $k => $v ) {
        if ( $k != 'signValue'  ) {
            $buff .= $k . '=' . $v . '&';
        } 
    }
    $buff = trim( $buff, '&' );
    return $buff;
}

//生成 sha256WithRSA 签名
function getSign( $content ) {
    $filePath = 'test-pfx.pfx';
    if ( !file_exists( $filePath ) ) {
        return false;
    }
    $pkcs12 = file_get_contents( $filePath );
    if ( openssl_pkcs12_read( $pkcs12, $certs, '000000' ) ) {
        $pkey = $certs['pkey'];
        $pi_key =  openssl_pkey_get_private($pkey);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id,别名函数openssl_get_privatekey
        if(!$pi_key){
            //var_dump($pi_key);
            return false;
        }
        //print_r($certs); 可以查看里面是啥
        //根据实际情况键值可能不同
        //最后一个参数签名算法还有其他值OPENSSL_ALGO_SHA1
        openssl_sign( $content, $signature, $pkey, 'SHA256' );
        openssl_free_key($pi_key);
        $sign = base64_encode( $signature );
        return $sign;
    }
}

//验证 sha256WithRSA 签名
function verify( $content, $sign ) {
    $publicKey = file_get_contents( 'xdzf_cfca_prd.cer' ); //验证接口方传过来数据用使用这个公钥,使用这个。
    $pu_key = openssl_pkey_get_public($publicKey);//这个函数可用来判断公钥是否是可用的,可用返回资源id Resource id 
    if(!$pu_key){
        //var_dump( $pu_key);
        return false;
    }
    $key = openssl_get_publickey( $publicKey ); //返回资源型Resource id #9,和上面函数openssl_pkey_get_public,效果一致
    $ok = openssl_verify( $content, base64_decode($sign) , $key, 'SHA256' );
    openssl_free_key( $key);
    return $ok;
}

本文标签:

版权声明:若无特殊注明,本文皆为《菜鸟站长》原创,转载请保留文章出处。

本文链接:php的rsa生成签名和验证签名方法 - https://www.wlphp.com/?post=263

发表评论

电子邮件地址不会被公开。 必填项已用*标注

福利广告