700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 解密微信小程序用户敏感数据获取用户信息

解密微信小程序用户敏感数据获取用户信息

时间:2018-07-04 10:21:47

相关推荐

解密微信小程序用户敏感数据获取用户信息

/*** 解密用户敏感数据获取用户信息** @param encryptedData 包括敏感数据在内的完整用户信息的加密数据* @param sessionKey 数据进行加密签名的密钥 通过getCode方法获取sessionKey* @param iv 加密算法的初始向量* @return AppletUserDto*/public static AppletUserDto getUserInfo(String encryptedData, String sessionKey, String iv) {// 被加密的数据byte[] dataByte = Base64.decode(encryptedData);// 加密秘钥byte[] keyByte = Base64.decode(sessionKey);// 偏移量byte[] ivByte = Base64.decode(iv);try {// 如果密钥不足16位,那么就补足. 这个if 中的内容很重要int base = 16;if (keyByte.length % base != 0) {int groups = keyByte.length / base + 1;byte[] temp = new byte[groups * base];Arrays.fill(temp, (byte) 0);System.arraycopy(keyByte, 0, temp, 0, keyByte.length);keyByte = temp;}// 初始化Security.addProvider(new BouncyCastleProvider());Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");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, StandardCharsets.UTF_8);return JSONObject.parseObject(result, AppletUserDto.class);}} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidParameterSpecException | IllegalBlockSizeException | BadPaddingException | InvalidKeyException | InvalidAlgorithmParameterException | NoSuchProviderException e) {e.printStackTrace();}throw new ServiceException("解密数据异常");}

这里只用到了手机号 可根据自己业务自行添加

@Datapublic class AppletUserDto {private String purePhoneNumber;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。