收藏
回答

golang 银行卡到账

<return_code><![CDATA[SUCCESS]]></return_code>

<return_msg><![CDATA[参数错误,请检查参数]]></return_msg>

<result_code><![CDATA[FAIL]]></result_code>

<err_code><![CDATA[PARAM_ERROR]]></err_code>

<err_code_des><![CDATA[解密真实姓名或银行卡号出错]]></err_code_des>



加密算法
func RSA_Encrypt(data []byte) ([]byte ,error){
   publicByte := []byte(`
-----BEGIN RSA PUBLIC KEY-----
xxxx....
-----END RSA PUBLIC KEY-----
`)
   block, _ := pem.Decode([]byte(publicByte))
   if block == nil {
      return nil, errors.New("public key error")
   }

   // 解析公钥
   pubInterface, err := x509.ParsePKCS1PublicKey(block.Bytes)
   if err != nil {
      return nil, err
   }
   // 类型断言
   pub := pubInterface
   //加密
   return rsa.EncryptPKCS1v15(rand.Reader, pub, data)
}


最后一次编辑于  06-12
回答关注问题邀请回答
收藏

2 个回答

  • 微信支付技术助手8
    微信支付技术助手8
    06-12

    你好,从报错看是你的本身提交的参数,解密的时候出的错误。但不清楚,你这边具体调用的哪个API。完整的请求和返回参数是什么?请详细描述一下。谢谢。

    06-12
    有用
    回复 2
  • 魔术师Carvendy
    魔术师Carvendy
    06-12
    https://api.mch.weixin.qq.com/mmpaysptrans/pay_bank
    
    // 加密算法
    func EncryptPadding(plaintext []byte) ([]byte, error) {
       publicKey := `
    -----BEGIN RSA PUBLIC KEY-----
    xxxxx.......
    -----END RSA PUBLIC KEY-----
    `
       pk,err := genPubKey([]byte(publicKey))
       fmt.Println(err)
    
       blocks := pkcs1Padding(plaintext, pk.N.BitLen()/8)
       buffer := bytes.Buffer{}
       for _, block := range blocks {
          ciphertextPart, err := rsa.EncryptPKCS1v15(rand.Reader, pk, block)
          if err != nil {
             return nil, err
          }
          buffer.Write(ciphertextPart)
       }
    
       return buffer.Bytes(), nil
    }
    
    func pkcs1Padding(src []byte, keySize int) [][]byte {
       srcSize := len(src)
       //blockSize := keySize - 11
       blockSize := keySize - 41
       var v [][]byte
    
       if srcSize <= blockSize {
          v = append(v, src)
       } else {
          groups := len(src) / blockSize
          for i := 0; i < groups; i++ {
             block := src[:blockSize]
    
             v = append(v, block)
             src = src[blockSize:]
    
             if len(src) < blockSize {
                v = append(v, src)
             }
          }
       }
       return v
    }
    
    06-12
    有用
    回复
登录 后发表内容
问题标签