收藏
回答

wx.getUserinfo()分享之后解密的方法缺少C#版本的,请尽快解决

问题模块
API和组件


加密数据解密算法

接口如果涉及敏感数据(如wx.getUserInfo当中的 openId 和unionId ),接口的明文内容将不包含这些敏感数据。开发者如需要获取敏感数据,需要对接口返回的加密数据( encryptedData )进行对称解密。 解密算法如下:

  1. 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充。

  2. 对称解密的目标密文为 Base64_Decode(encryptedData)。

  3. 对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 是16字节。

  4. 对称解密算法初始向量 为Base64_Decode(iv),其中iv由数据接口返回。

微信官方提供了多种编程语言的示例代码(点击下载)。每种语言类型的接口名字均一致。调用方式可以参照示例。

另外,为了应用能校验数据的有效性,我们会在敏感数据加上数据水印( watermark )


微信官方提供了多种编程语言的示例代码只有C++,Nodejs,PHP,Pyhton,缺少C#版本的


最后一次编辑于  2017-05-22  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏关注问题回答

12 个回答

  • 赛文.迪斯.雷特
    赛文.迪斯.雷特
    2017-05-22

    这个问题我都问了好几天了, 没有人回应。。。

    2017-05-22
    赞同
    回复
  • 追梦的人(IT大叔一枚)
    追梦的人(IT大叔一枚)
    2017-05-22

    自己写一个呗,不是太难,调用类就可以了

    2017-05-22
    赞同
    回复
  • 赛文.迪斯.雷特
    赛文.迪斯.雷特
    2017-05-22

    虽然实现算法不需要自己写,但是怎么写得正确,还是需要参考官方的例子

    2017-05-22
    赞同
    回复
  • 夜未央
    夜未央
    2017-05-22

    这个最好还是官方给出DEMO比较好,自己写的不一定好

    2017-05-22
    赞同
    回复
  • 赛文.迪斯.雷特
    赛文.迪斯.雷特
    2017-05-22

    根据网上的例子写了一个,测试的是正确的,但不保证,毕竟不是官方的。。。



    2017-05-22
    赞同
    回复
  • 路边摊儿小摇滚🏂🏹
    路边摊儿小摇滚🏂🏹
    2017-05-22

    我也是 用这个方法 但是 有的账户就可以解密 有的 就抱错

    在    byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);


    System.Security.Cryptography.CryptographicException: 填充无效,无法被移除。 有人知道这个问题么


    2017-05-22
    赞同
    回复
  • 夜未央
    夜未央
    2017-05-23

    参照其他的代码的时候,会发现有一个方法WXBizDataCrypt oWXBizDataCrypt(Appid, Session_key);然后才是WXBizDataCrypt.DecryptData(EncryptedData, Iv),这个5楼提供的方法不一致,这样解密的正确性不一定很高

    2017-05-23
    赞同
    回复
  • 夜未央
    夜未央
    2017-05-23

    还有就是您得解密之后的数据是字节数组,而官方给出的答案是json数据,不一致

    2017-05-23
    赞同
    回复
  • 一切随风
    一切随风
    2018-01-15

    填充无效,无法被移除 这个有解决的吗?

    2018-01-15
    赞同
    回复
  • 阿勇
    阿勇
    2018-01-29

    一样遇到这个问题,很一直没有解决

    2018-01-29
    赞同
    回复