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

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

    //小程序的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 MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

python中os.stat().st_size、os.path.getsize()获取文件大小

《python中os.stat().st_size、os.path.getsize()获取文件大小》本文介绍了使用os.stat()和os.path.getsize()函数获取文件大小,文中通过示例代... 目录一、os.stat().st_size二、os.path.getsize()三、函数封装一、os

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

详解Java中的敏感信息处理

《详解Java中的敏感信息处理》平时开发中常常会遇到像用户的手机号、姓名、身份证等敏感信息需要处理,这篇文章主要为大家整理了一些常用的方法,希望对大家有所帮助... 目录前后端传输AES 对称加密RSA 非对称加密混合加密数据库加密MD5 + Salt/SHA + SaltAES 加密平时开发中遇到像用户的

python获取当前文件和目录路径的方法详解

《python获取当前文件和目录路径的方法详解》:本文主要介绍Python中获取当前文件路径和目录的方法,包括使用__file__关键字、os.path.abspath、os.path.realp... 目录1、获取当前文件路径2、获取当前文件所在目录3、os.path.abspath和os.path.re

Java子线程无法获取Attributes的解决方法(最新推荐)

《Java子线程无法获取Attributes的解决方法(最新推荐)》在Java多线程编程中,子线程无法直接获取主线程设置的Attributes是一个常见问题,本文探讨了这一问题的原因,并提供了两种解决... 目录一、问题原因二、解决方案1. 直接传递数据2. 使用ThreadLocal(适用于线程独立数据)