微信小程序登录授权、获取用户敏感信息、解密手机号

本文主要是介绍微信小程序登录授权、获取用户敏感信息、解密手机号,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    //小程序的key和秘钥private final String wechatAppId = "";private final String wechatSecretKey = " ";private final String grantType = "authorization_code";//根据微信登录返回的code获取解密的key的接口private final String wxhttpurl = "https://api.weixin.qq.com/sns/jscode2session";

根据微信登录返回的code获取openId和sessionkey

    @RequestMapping(value = "getCode.do", method = RequestMethod.POST)public Map<String,String> getCode(String code){Map map = new HashMap();if (code == null || code.length() == 0) {map.put("status", 0);map.put("msg", "code 不能为空");return map;}String params = "appid=" + wechatAppId + "&secret=" + wechatSecretKey + "&js_code=" + code + "&grant_type=" + grantType;String sr = HttpRequest.sendGet(wxhttpurl, params);JSONObject jsonObject = (JSONObject)JSONObject.parse(sr);if(!sr.contains("session_key")||!sr.contains("openid")){log.error(sr);map.put("status", jsonObject.get("errcode"));map.put("msg", jsonObject.get("errmsg"));return map;}String sessionKey = jsonObject.get("session_key").toString();String openId = jsonObject.get("openid").toString();//客户身份信息解密需要,考虑安全缓存在服务端stringRedisTemplate.opsForValue().set("sessionKey_"+openId,sessionKey,1000*60*5);map.put("200","OK");map.put("openId",openId);return map;}

解密工具类:

 public static JSONObject decryptData(String encryptedData, String iv, String sessionKey) throws Exception {byte[] dataByte = Base64.decodeBase64(encryptedData);// 加密秘钥byte[] keyByte = Base64.decodeBase64(sessionKey);// 偏移量byte[] ivByte = Base64.decodeBase64(iv);// 如果密钥不足16位,那么就补足.  这个if 中的内容很重要int base = 16;keyByte = completToBase(keyByte,base);ivByte = completToBase(ivByte,base);// 初始化Security.addProvider(new BouncyCastleProvider());Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");parameters.init(new IvParameterSpec(ivByte));cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化byte[] resultByte = cipher.doFinal(dataByte);if (null != resultByte && resultByte.length > 0) {String result = new String(resultByte, "UTF-8");return JSONObject.parseObject(result);}return null;}//补全数组位数public static byte[] completToBase(byte[] bytes,int base){byte[] temp = new byte[]{};if (bytes.length % base != 0) {int groups = bytes.length / base + (bytes.length % base != 0 ? 1 : 0);temp = new byte[groups * base];Arrays.fill(temp, (byte) 0);System.arraycopy(bytes, 0, temp, 0, bytes.length);}return temp;}

前端调用登录接口的时候一直报错javax.crypto.IllegalBlockSizeException: last block incomplete in decryption,很纳闷看了半天,也没整理出来,后来发现,原来是前端传参通过url的方式,参数中包含很多的特殊字符,后端接收到的参数已经变了。

后来前端改成formdata方式传参就ok了
————————————————
版权声明:本文为CSDN博主「V核桃V」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chen1280436393/article/details/97016746

这篇关于微信小程序登录授权、获取用户敏感信息、解密手机号的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1091073

相关文章

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

Python如何获取域名的SSL证书信息和到期时间

《Python如何获取域名的SSL证书信息和到期时间》在当今互联网时代,SSL证书的重要性不言而喻,它不仅为用户提供了安全的连接,还能提高网站的搜索引擎排名,那我们怎么才能通过Python获取域名的S... 目录了解SSL证书的基本概念使用python库来抓取SSL证书信息安装必要的库编写获取SSL证书信息

mysql删除无用用户的方法实现

《mysql删除无用用户的方法实现》本文主要介绍了mysql删除无用用户的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 1、删除不用的账户(1) 查看当前已存在账户mysql> select user,host,pa

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac