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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

娃娃菜001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值