美文网首页Web前端之路HTML5
微信企业号文档坑

微信企业号文档坑

作者: 高小震 | 来源:发表于2019-08-13 15:44 被阅读4次

    1. 签名加密对比

    sha1(sort(token、timestamp、nonce、msg_encrypt))
    sort表示的是这四个所对应的值的排序,而非K排序,排序结果和签名作对比
    golang 例子:

    func getSign(array ...string)  string{
      strs:=array[:]
      sort.Strings(strs)
      signStr:=strings.Join(strs,"")
      sn:=sha1.New()
      sn.Write([]byte(signStr))
      signData:=sn.Sum(nil)
      return fmt.Sprintf("%+x",signData)
    }
    

    2. aes key:

    需要将aesKey进行解密,解密是需要在原EncodingAESKey后增加=,然后在将aes作base64解密
    注意:解密结果不需要转换成字符串

    3. aes加密方式:

    aes-cbc加密方式,作pksc7解包,iv为key的前十六位
    go 例子:

    func AesDecrypt(src, key []byte) (dst []byte, err error) {
        block, err := aes.NewCipher(key)
        if err != nil {
            return nil, err
        }
        iv := make([]byte, aes.BlockSize)
        if _, err := io.ReadFull(rand.Reader, iv); err != nil {
            return nil, err
        }
        dst = make([]byte, len(src))
        cipher.NewCBCDecrypter(block, iv).CryptBlocks(dst, src)
    
        return PKCS7UnPad(dst), nil
    }
    
    // PKCS7UnPad PKSC#7解包
    func PKCS7UnPad(msg []byte) []byte {
        length := len(msg)
        padlen := int(msg[length-1])
        return msg[:length-padlen]
    }
    

    参考

    微信企业号api
    go sdk

    相关文章

      网友评论

        本文标题:微信企业号文档坑

        本文链接:https://www.haomeiwen.com/subject/jwfbjctx.html