收藏
回答

企业付款到银行卡用RSA公钥加密银行卡号失败

获取RSA加密公钥成功,但是用函数openssl_pkey_get_public()处理总是返回false不知道是怎么回事?用的是PHP开发,

这是获取到的公钥,是不是获取的公钥有问题,大神们帮忙看一下吧,下边是获取的RSA公钥和需要执行的方法

-----BEGIN RSA PUBLIC KEY-----

MIIBCgKCAQEArF2OB8jWqEKFzeF93CL6e4wgn+qoyUkVJkyvcBqfYS5TqlJ5KbSL

V/+rigkTzvHQV1Jx+gp9EY3utsKVwBPqeI6CZHyrEXb/Bz/nmkpZN6zwEudFVomI

eauQRDJnlxhmOl9VpK5eQBXNK3DjqqF/55gVlnmUO2jaQY2ozWroUQYBb3Nh9JIm

hORjwGwUgtcCFUWRMPzeUajDOxfGbgntJOT9gbY6ToBrUr9KWaHih6QCSCqmwaVk

dCLbwgoosiIGcgNtxPs5WjQ3MJYr+zF+DxPmu0Tv9/vLQpJruuct2GXEYh6Zwu+a

SSS+sFDNyRIO6rRjiipAEyh2kPabmjlg9QIDAQAB

-----END RSA PUBLIC KEY-----

/**

   * 公钥加密,银行卡号和姓名需要RSA算法加密

   * @param string $data  需要加密的字符串,银行卡/姓名

   * @return null|string  加密后的字符串

   */

  private function publicEncrypt($data)

  {

    // 进行加密

      $pubkey = openssl_pkey_get_public(file_get_contents(ROOT_PATH.'/'.$this->wechat->mchId.'_publicrsa.pem'));

     // $pubkey是false 下面的加密流程更没法执行

    $encrypt_data = '';

    $encrypted = '';

    $res = openssl_public_encrypt($data,$encrypt_data,$pubkey,OPENSSL_PKCS1_OAEP_PADDING);

    if($res){//加密成功,返回base64编码的字符串

      return base64_encode($encrypted.$encrypt_data);

    }else{

      return false;

    }

  }


回答关注问题邀请回答
收藏

2 个回答

  • 狂气の羊驼
    狂气の羊驼
    2020-01-06

    PKCS#1 转 PKCS#8:

    然后在尝试

    2020-01-06
    有用
    回复
  • 微信支付技术助手1
    微信支付技术助手1
    2019-07-29

    仅仅看这个公钥是看不出太多问题的。可参考官网文档进行排查。

    2019-07-29
    有用
    回复 1
    • 苏艳山
      苏艳山
      2019-07-29
      官方文档都已经看很多边了,RAS没问题,用这个openssl_pkey_get_public()函数为什么返回的是false
      2019-07-29
      1
      回复
登录 后发表内容