用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,登录网站

小程序社区 首页 教程 实战教程 查看内容

小程序encryptedData

Rolan 2017-6-3 00:38

准备知识:Base64编解码AES算法、填充模式、偏移向量session_key会话密钥,以及怎么存储和获取以上3点对于理解解密流程非常重要。根据官方文档,我梳理了大致的解密流程,如下:小程序客户端调用wx.login,回调里面 ...

准备知识:

Base64编解码 
AES算法、填充模式、偏移向量 
session_key会话密钥,以及怎么存储和获取 
以上3点对于理解解密流程非常重要。

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

小程序客户端调用wx.login,回调里面包含js_code。 
然后将js_code发送到服务器A(开发者服务器),服务器A向微信服务器发起请求附带js_code、appId、secretkey和grant_type参数,以换取用户的openid和session_key(会话密钥)。 
服务器A拿到session_key后,生成一个随机数我们叫3rd_session,以3rdSessionId为key,以session_key + openid为value缓存到redis或memcached中;因为微信团队不建议直接将session_key在网络上传输,由开发者自行生成唯一键与session_key关联。其作用是: 
将3rdSessionId返回给客户端,维护小程序登录态。 
通过3rdSessionId找到用户session_key和openid。 
客户端拿到3rdSessionId后缓存到storage, 
通过wx.getUserIinfo可以获取到用户敏感数据encryptedData 。 
客户端将encryptedData、3rdSessionId和偏移量一起发送到服务器A 
服务器A根据3rdSessionId从缓存中获取session_key 
在服务器A使用AES解密encryptedData,从而实现用户敏感数据解密 
重点在6、7、8三个环节。 
AES解密三个参数:

密文 encryptedData 
密钥 aesKey 
偏移向量 iv 
服务端解密流程:

密文和偏移向量由客户端发送给服务端,对这两个参数在服务端进行Base64_decode解编码操作。 
根据3rdSessionId从缓存中获取session_key,对session_key进行Base64_decode可以得到aesKey,aes密钥。 
调用aes解密方法,算法为 AES-128-CBC,数据采用PKCS#7填充。 
下面结合小程序实例说明解密流程:

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

  1. var that = this;
  2. wx.login({
  3. success: function (res) {
  4. //微信js_code
  5. that.setData({wxcode: res.code});
  6. //获取用户信息
  7. wx.getUserInfo({
  8. success: function (res) {
  9. //获取用户敏感数据密文和偏移向量
  10. that.setData({encryptedData: res.encryptedData})
  11. that.setData({iv: res.iv})
  12. }
  13. })
  14. }
  15. })

2.使用code换取3rdSessionId

  1. var httpclient = require 邀请
    鲜花
    鲜花
    鸡蛋
    鸡蛋
    分享至 : QQ空间
    收藏
    原作者: CocoaKC

    相关阅读