VPS参考测评推荐
专注分享VPS主机优惠信息
衡天云优惠活动
华纳云优惠活动

微信开发入门(六)用户数据解密(微信用户数据是什么意思)

主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情!
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作

经常在群里看到一些朋友询问小程序用户的数据解密流程,所以打算写一篇小程序用户敏感数据解密教程;

加密过程由微信服务器完成,解密过程由小程序和自己的服务器完成,即由encryptData获得以下数据:

{ & quotopenId & quot:& quotOPENID & quot,& quot昵称& quot:& quot昵称& quot,& quot性别& quot:性别,& quot城市& quot:& quot城市& quot,& quot省& quot:& quot省& quot,& quot国家& quot:& quot国家& quot,& quotavatarUrl & quot:& quotAVATARURL & quot,& quotunionId & quot:& quotUNIONID & quot,& quot水印& quot:{ & quotappid & quot:& quotAPPID & quot,& quot时间戳& quot:TIMESTAMP }}准备知识:

Base64编解码器

AES算法,填充图案,偏移向量

Session_key会话密钥以及如何存储和获取它。

以上三点对于理解解密过程非常重要。

根据官方文件,我梳理了大致的解密过程如下:

微信开发入门(六)用户数据解密(微信用户数据是什么意思)

小程序客户端调用wx.login,回调包含js_code。

然后将js_code发送给服务器A(开发者服务器),服务器A用js_code、appId、secretkey、grant_type参数向微信服务器发送请求,换取用户的openid和session_key(会话密钥)。

服务器A得到session_key后,生成一个名为3rd_session的随机数,以3rdSessionId为密钥,session_key+openid为值,缓存在redis或memcached中;因为微信团队不建议在网络上直接传输session_key,所以开发者会生成一个唯一的密钥与session_key关联。它的功能是:

将3rdSessionId返回给客户端以维护applet登录状态。

通过3rdSessionId找到用户session_key和openid。

客户端获取3rdSessionId并将其缓存在存储中。

用户敏感数据可通过wx.getUserIinfo获取

客户端将encryptedData、3rdSessionId和offset发送给服务器a

服务器a根据3rdSessionId从缓存中获取session_key。

EncryptedData由服务器A中的AES解密,因此可以解密用户敏感数据。

重点六、七、八环节。AES解密三个参数:

密文加密数据

密钥aesKey

偏移向量iv

服务器解密过程:

密文和偏移向量从客户端发送到服务器端,在服务器端对这两个参数进行Base64_decode操作。

根据3rdSessionId,session_key从缓存中获取,aesKey和aes key可以通过对session_key进行Base64_decode获得。

调用aes解密方法,算法是AES-128-CBC,数据用PKCS#7填充。

下面用一个小程序的例子来解释解密过程:

1.登录微信获取用户信息。

var that = thiswx . log in({ success:function(RES){//微信js _ code that . setdata({ wxcode:RES . code }));//获取用户信息wx . get userinfo({ success:function(RES){//获取用户敏感数据密文和偏移量向量that . setdata({ encrypted data:RES . encrypted data })。that . setdata({ iv:RES . iv })})2。3rdSessionId的交换代码。

var http client = require(& amp;#39;../../utils/http client . js & amp;#39;)VAR = this//http client . req(URL,data,method,success,fail)http client . req(& amp;#39;http://localhost:8090/wxappservice/API/v1/wx/getSession & amp;#39;,{蜂名:& amp#39;WX _代码& amp#39;,代码:this.data.wxcode },& amp#39;获取& amp#39;,function(result){ var thirdSessionId = result . data . data . session id;that . setdata({ thirdSessionId:third SessionId })//将第三个session id放入小程序缓存wx . setstoragesync(&;#39;thirdSessionId & amp#39;,thirdSessionId) },function(result){ console . log(result)};3.发起解密请求

//httpclient.req(url,data,method,success,fail)http client . req(& amp;#39;http://localhost:8090/wxappservice/API/v1/wx/decodeUserInfo & amp;#39;,{蜂名:& amp#39;WX解码用户信息& amp#39;,encrypted data:this . data . encrypted data,iv: this.data.iv,session id:wx . getstoragesync(& amp;#39;thirdSessionId & amp#39;)},& amp#39;获取& amp#39;,function(result){ //解密数据console.log (result.data)},function(result){ console . log(result)});4.服务器端解密的实现(java)

/* * *解密用户敏感数据* @ param encrypted data plaintext * @ param iv加密算法的初始矢量* @ param session id * @ return */@ API(name = API constant . wx _ decode _ userinfo)@ request mapping(value = "/API/v1/wx/decodueserinfo & quot;,方法=请求方法。GET,produces = & quot应用程序/JSON & quot;)公图& lt字符串,对象& gtdecodueserinfo(@ request param(required = true,value = & quot加密数据& quot)字符串encryptedData,@RequestParam(required = true,value = & quotiv & quot)字符串iv,@RequestParam(required = true,value = & quotsessionId & quot)String sessionId){ //从缓存中获取session _ keyobjectwxsessionobj = redis util . Get(session id);if(null = = wxSessionObj){ return RTN param(40008,null);} String wxSessionStr =(String)wxSessionObj;string session key = wxsessionstr . split(& quot;# & quot)

如果你的小程序没有绑定微信开放平台,解密的数据不包含unionid参数,小程序绑定微信开放平台连接。

总结从解密的数据来看,唯一敏感的数据是appid;个人认为openid不是敏感数据,每个用户都会为每个微信官方账号生成一个安全的OpenID。Openid仅在appid范围内可用。除非你的appid也泄露了。

那么可以从解密的数据中获得appid。微信小程序团队的意图是什么?还是那句话,openid没有appid什么都不是。openid和appid可以区分和隔离不同小程序应用之间的用户,方便小程序开发者,同时可以将微信用户体系和第三方业务体系结合起来。

所以我认为解密敏感数据的主要目的不是解密并发回到客户端,而是在服务器端将微信用户信息整合到自己的业务中。

[相关建议]

1.下载微信微信官方账号平台源代码。

2.微信投票源代码

3.微信拉拉外卖2.2.4解密微信魔方开源版源代码。

这几篇文章你可能也喜欢:

本文由主机参考刊发,转载请注明:微信开发入门(六)用户数据解密(微信用户数据是什么意思) https://zhujicankao.com/113693.html

【腾讯云】领8888元采购礼包,抢爆款云服务器 每月 9元起,个人开发者加享折上折!
打赏
转载请注明原文链接:主机参考 » 微信开发入门(六)用户数据解密(微信用户数据是什么意思)
主机参考仅做资料收集,不对商家任何信息及交易做信用担保,购买前请注意风险,有交易纠纷请自行解决!请查阅:特别声明

评论 抢沙发

评论前必须登录!