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