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

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

    //小程序的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

相关文章

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过