微信小程序用户信息解密

问题描述

当小程序在获取用户信息或者获取手机号的时候,用户微信接口返回的是AES加密之后的数据,所以需要解决

方法

就拿获取手机号来讲,前端通过微信接口:

Page({getPhoneNumber (e) {console.log(e.detail.errMsg)console.log(e.detail.iv)console.log(e.detail.encryptedData)}
})

返回结果为:

{..."detail": {"cloudID": "28_xrg3EUUOKQBLxLaBGrtYkDa7JuRH8...","encryptedData": "..Bb3cK/KI3hbqk0m5QhoQ==","errMsg": "getPhoneNumber:ok","iv": "S92Ox1zXQeSaFOWw==",  }...
}
public static String userDataDecrypt(String appId, String encryptedData, String sessionKey, String iv) {try {byte[] base64DecryptData = Base64Utils.decodeFromString(encryptedData);byte[] base64DecryptIv = Base64Utils.decodeFromString(iv);byte[] base64DecryptSk = Base64Utils.decodeFromString(sessionKey);AlgorithmParameterSpec alpSpec = new IvParameterSpec(base64DecryptIv);Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKey secretKey = new SecretKeySpec(base64DecryptSk, "AES");cipher.init(Cipher.DECRYPT_MODE, secretKey, alpSpec);String result = new String(cipher.doFinal(base64DecryptData), "UTF-8");JSONObject jsonObject = JSON.parseObject(result);if (jsonObject.containsKey("watermark")){JSONObject watermark = jsonObject.getJSONObject("watermark");if (watermark.containsKey("appid") && Objects.equals(watermark.getString("appid"), appId)){return result;}}return null;} catch (Exception e) {e.printStackTrace();}return null;
}

测试:

public static void main(String[] args) {String encryptData ="u/xOW9eZ9Hc1xhNugVwAYPA/t04F3ssXGQnn4uApCXBa1AQv";String iv = "6y9KiP232YdaxeyUw==";String appId = "wx1723293idois9";String sessionKey = "CRSSV432JvObMQ==";String result = userDataDecrypt(appId,encryptData,sessionKey,iv);System.out.println(result);
}

解密结果:

{"phoneNumber": "13580006666","purePhoneNumber": "13580006666","countryCode": "86","watermark":{"appid":"APPID","timestamp":"TIMESTAMP"}
}

微信小程序用户信息解相关推荐

  1. 获取小程序用户信息+java_java获取微信小程序用户信息

    第一步:获取openid.session_key等信息. /** * 获取微信小程序的用户openid和session_key/unionid * 返回格式:{"session_key&qu ...

  2. 商户后台返回数据签名错误_微信小程序 用户信息开放数据校验与解密

    服务端获取开放数据 小程序可以通过各种前端接口获取微信提供的开放数据.考虑到开发者服务端也需要获取这些开放数据,微信提供了两种获取方式: 方式一:开发者后台校验与解密开放数据 方式二:云调用直接获取开 ...

  3. 微信小程序用户登录信息过期处理

    微信小程序用户登录信息过期处理 由于小程序对获取用户信息的新规定,获取用户信息必须通过一个button调出获取窗口,然而用户的token会过期,而本地存在的缓存可能会让用户误以为自己仍处于登录状态,但 ...

  4. 微信小程序点击按钮弹出弹窗_转载 | 广东大学生就业创业微信小程序操作流程详解(一)...

    广东大学生就业创业微信小程序 操作流程详解(一) 转眼来到10月,炎炎夏日也阻挡不了青春的忙碌,同学萌走出校园,迈向社会. 在这段时间,同学们不仅要准备毕业论文,应对毕业答辩,还需要兼顾各种毕业手续的 ...

  5. webform窗体怎么实现session唯一标识_微信小程序用户登录和登录态维护的实现_javascript技巧...

    这篇文章主要介绍了微信小程序用户登录和登录态维护的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 让用户登录,标识用户和获取 ...

  6. 微信java 签名验证_JAVA版微信小程序用户数据的签名验证和加解密

    签名验证和加解密 数据签名校验 为了确保 开放接口 返回用户数据的安全性,微信会对明文数据进行签名.开发者可以根据业务需要对数据包进行签名校验,确保数据的完整性. 签名校验算法涉及用户的session ...

  7. python写微信小程序源码示例_python实现微信小程序用户登录、模板推送

    python实现微信小程序用户登录.模板推送 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  python实现微信小程序用户登录.模板推送.txt ] (友情提示 ...

  8. 微信小程序用户数据的签名校验和加解密 - 后端nodejs

    在本文 微信小程序用户数据的签名校验和加解密 之前需要先看看 微信小程序-获取用户session_key,openid,unionid - 后端为nodejs 代码封装是在上文添加的. 小程序代码: ...

  9. 微信小程序python flask_Python Flask 搭建微信小程序后台详解

    前言: 近期需要开发一个打分的微信小程序,涉及到与后台服务器的数据交互,因为业务逻辑相对简单,故选择Python的轻量化web框架Flask来搭建后台程序.因为是初次接触小程序,经过一番摸索和尝试,个 ...

最新文章

  1. sql 优化 tips
  2. java部署web service的方式
  3. Metasploit漏洞利用基础教程要出版了
  4. 【MFC三天一个游戏】之 局域网黑白棋
  5. 经典博文--各系列文章
  6. 培训补坑(day1:最短路two-sat)
  7. 大讲台大数据特训学习笔记
  8. SVN Error:请求的名称有效并且在数据库中找到,但是它没有相关的正确的数据来被解析...
  9. C# int[,] 和 int[][]
  10. MySQL执行计划extra中的using index 和 using where using index 的区别
  11. Test on 01/19/2019
  12. PKU 1273 Drainage Ditches
  13. 20220309讨论
  14. 阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第3节 注解_14_注解_自定义注解_格式本质...
  15. wap尝试调取app(网易新闻为例)
  16. oracle awr报告 开关,【Oracle之AWR报告解析】
  17. 基于vue的后台管理系统开发
  18. Java内存模型(JMM)学习总结
  19. python版本降级
  20. 闭关之 C++ 函数式编程笔记(一):函数式编程与函数对象

热门文章

  1. F# 图形数学基础。
  2. MFC中afx_msg是什么
  3. ubuntu 下的pdfcrop功能不(pdf剪切)
  4. 牛逼顿的一生:当智商高到一定程度,情商就不重要了
  5. 【每日早报】2019/07/19
  6. CHIL-SQL-UCASE() 函数
  7. 机器人课做的一个悬崖识别自动变向的一个小车
  8. 上海航芯|推出基于ACX200T的V2X解决方案
  9. 用App Designer 制作2048小游戏
  10. 数学:确定性的丧失--第一章 数学真理的起源