日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

java微信小程序步數(shù)encryptedData和開放數(shù)據(jù)解密的實現(xiàn)

瀏覽:223日期:2022-05-25 18:45:10

前提:

三個參數(shù),1.sessionKey(拿openId的時候可以得到)2.encryptedData(前端提供)3.iv(前端提供)

一個類,一個方法。

1.類:

import java.nio.charset.Charset;import java.util.Arrays;/** * 微信小程序加解密 * @author liuyazhuang * */public class WxPKCS7Encoder { private static final Charset CHARSET = Charset.forName('utf-8'); private static final int BLOCK_SIZE = 32; /** * 獲得對明文進行補位填充的字節(jié). * * @param count * 需要進行填充補位操作的明文字節(jié)個數(shù) * @return 補齊用的字節(jié)數(shù)組 */ public static byte[] encode(int count) { // 計算需要填充的位數(shù) int amountToPad = BLOCK_SIZE - (count % BLOCK_SIZE); if (amountToPad == 0) { amountToPad = BLOCK_SIZE; } // 獲得補位所用的字符 char padChr = chr(amountToPad); String tmp = new String(); for (int index = 0; index < amountToPad; index++) { tmp += padChr; } return tmp.getBytes(CHARSET); } /** * 刪除解密后明文的補位字符 * * @param decrypted * 解密后的明文 * @return 刪除補位字符后的明文 */ public static byte[] decode(byte[] decrypted) { int pad = decrypted[decrypted.length - 1]; if (pad < 1 || pad > 32) { pad = 0; } return Arrays.copyOfRange(decrypted, 0, decrypted.length - pad); } /** * 將數(shù)字轉(zhuǎn)化成ASCII碼對應(yīng)的字符,用于對明文進行補碼 * * @param a * 需要轉(zhuǎn)化的數(shù)字 * @return 轉(zhuǎn)化得到的字符 */ public static char chr(int a) { byte target = (byte) (a & 0xFF); return (char) target; }}

2.方法:

import java.io.UnsupportedEncodingException;import java.security.AlgorithmParameters;import java.security.InvalidAlgorithmParameterException;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.security.Security;import java.security.spec.InvalidParameterSpecException;import java.util.HashMap;import javax.annotation.Resource;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base64;import org.apache.commons.lang3.StringUtils;import org.bouncycastle.jce.provider.BouncyCastleProvider;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class AesCbcUtil { static { //BouncyCastle是一個開源的加解密解決方案,主頁在http://www.bouncycastle.org/ Security.addProvider(new BouncyCastleProvider()); } /** * AES解密 * * @param data //密文,被加密的數(shù)據(jù) * @param key //秘鑰 * @param iv //偏移量 * @param encodingFormat //解密后的結(jié)果需要進行的編碼 * @param type //0 是其他 1是微信步數(shù) * @return * @throws Exception */ public static String decrypt(String data, String key, String iv, String encodingFormat,Integer type) throws Exception {// initialize(); if(StringUtils.isEmpty(data)||StringUtils.isEmpty(key)||StringUtils.isEmpty(iv)) throw new SkyParamNullException('小程序獲取用戶信息參數(shù)不能為空'); //被加密的數(shù)據(jù) byte[] dataByte = Base64.decodeBase64(data); //加密秘鑰 byte[] keyByte = Base64.decodeBase64(key); //偏移量 byte[] ivByte = Base64.decodeBase64(iv); try { 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) { if (type==1){ return new String(WxPKCS7Encoder.decode(resultByte)); }else { return new String(resultByte, encodingFormat); } } return null; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); log.error('小程序解析出錯1{}',e.getMessage()); } catch (NoSuchPaddingException e) { e.printStackTrace(); log.error('小程序解析出錯2{}',e.getMessage()); } catch (InvalidParameterSpecException e) { e.printStackTrace(); log.error('小程序解析出錯3{}',e.getMessage()); } catch (InvalidKeyException e) { e.printStackTrace(); log.error('小程序解析出錯4{}',e.getMessage()); } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); log.error('小程序解析出錯5{}',e.getMessage()); } catch (IllegalBlockSizeException e) { e.printStackTrace(); log.error('小程序解析出錯6{}',e.getMessage()); } catch (BadPaddingException e) { e.printStackTrace(); log.error('小程序解析出錯7{}',e.getMessage()); } catch (UnsupportedEncodingException e) { e.printStackTrace(); log.error('小程序解析出錯8{}',e.getMessage()); } return null; }}

實現(xiàn)

@ApiOperation(value = 'wx步數(shù)解密') @PostMapping(value = '/decode') public ResultModel<Object> questionList(@RequestBody WxSportParam param) throws Exception { HashMap<String, Object> map = wxXiaoChenXuUtil.getWxOpenId(//這個方法網(wǎng)上很多,沒有就用binarywang的 param.getCode()//前端提供的code ,sysProperties.getWxAppId()//appID ,sysProperties.getWxAppSecret());//secret String sessionKey = map.get('session_key').toString(); String result = AesCbcUtil.decrypt(param.getData(), sessionKey,param.getIv(), 'UTF-8',1); return ResultModel.success(result); }

出來的數(shù)據(jù) :

{ “stepInfoList”: [ {“timestamp”: 1445866601,“step”: 100 }, {“timestamp”: 1445876601,“step”: 120 } ] }

tips:如果是解析用戶信息的話一樣的用法,解密decrypt中參數(shù)type傳0。兩者區(qū)別在于字節(jié)的decode方法不一樣而已。

到此這篇關(guān)于java微信小程序步數(shù)encryptedData和開放數(shù)據(jù)解密的實現(xiàn)的文章就介紹到這了,更多相關(guān)java微信小程序步數(shù)encryptedData內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: 微信
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品亚洲a∨一区二区三区18| 日韩精品三级| 国产精品自在| 国产成人精品亚洲日本在线观看| 精品免费在线| 国产毛片一区二区三区 | 国产精品hd| 亚洲天堂av影院| 精品女同一区二区三区在线观看| 鲁大师精品99久久久| 日本午夜精品久久久| 欧美xxxx中国| 一区二区91| 亚洲深爱激情| 日韩电影免费在线观看| 欧美日韩黑人| 亚洲女同一区| 黄色网一区二区| 国产精品资源| 美女视频黄免费的久久| 国产精品一二| 日本а中文在线天堂| 999视频精品| 亚洲涩涩av| 国产一区二区三区不卡av| 欧美va天堂在线| 奇米狠狠一区二区三区| 国产精品一区高清| 激情欧美一区二区三区| 在线精品国产亚洲| 精品国产精品国产偷麻豆 | 久久亚洲精品中文字幕蜜潮电影| 麻豆精品视频在线观看视频| 麻豆精品久久| 中文无码久久精品| 国产精品日本一区二区不卡视频| 日韩在线欧美| 日韩欧美在线精品| 婷婷成人在线| 麻豆精品av| 国产 日韩 欧美一区| 久久精品高清| 狠狠久久伊人中文字幕| 亚洲精品高潮| 99国产一区| 日本精品影院| 国产一区二区三区亚洲| 婷婷精品在线| 爽好久久久欧美精品| 成人精品国产亚洲| 麻豆免费精品视频| 国产伦一区二区三区| 日韩精品免费视频人成| 国产精品婷婷| 香蕉国产精品| 午夜av一区| 五月精品视频| 黄色亚洲免费| 99pao成人国产永久免费视频 | 久久精品国产大片免费观看| 国产不卡一区| 麻豆中文一区二区| 国产乱论精品| 精品久久影院| 一区二区三区四区日本视频| 97精品国产| 精品亚洲美女网站| 精品一区在线| 亚洲日本国产| 欧美亚洲自偷自偷| 国产精品宾馆| 午夜精品成人av| 欧美特黄一级| 日韩精品视频在线看| 欧美日韩一区二区三区不卡视频 | 国产欧美日韩在线一区二区| 亚洲ab电影| 国产日韩视频在线| 精品视频国产| 久久九九精品| 亚洲婷婷丁香| 91成人在线| 日韩欧美一区免费| 在线亚洲欧美| 国产精品传媒麻豆hd| 91精品国产成人观看| 日韩精品一二区| 免费在线观看一区| 欧美不卡在线| 欧美日韩视频免费看| 麻豆一区二区三| 不卡一区综合视频| 国产精品久久免费视频| 激情综合亚洲| 欧美色综合网| 国精品一区二区| 欧美精品三级在线| 亚洲电影在线一区二区三区| 青青草91久久久久久久久| 日韩国产网站| 国产精品久久| 老牛国产精品一区的观看方式| 久久精品理论片| 在线免费观看亚洲| 久久九九精品| 91亚洲精品视频在线观看 | 亚洲午夜久久| 亚洲福利一区| 久久精品国产精品亚洲毛片| 六月婷婷一区| 欧美91视频| 精品欧美一区二区三区在线观看| 欧美成人精品午夜一区二区| 国产成人调教视频在线观看| 亚洲毛片在线| 另类亚洲自拍| 亚洲婷婷在线| 欧美13videosex性极品| 欧美日一区二区三区在线观看国产免 | 国产在线看片免费视频在线观看| 亚洲va久久| 日韩精品视频在线看| 免费黄网站欧美| 亚洲中字黄色| 亚洲自拍另类| 视频在线观看91| 一区二区三区四区精品视频| 夜久久久久久| 中文无码日韩欧| 日韩视频1区| 亚洲免费专区| 欧美日韩va| 欧美色综合网| 国产一区二区精品久| 另类专区亚洲| 亚洲免费福利| 色在线中文字幕| 中文字幕人成乱码在线观看| 国产精品久久久久久久免费观看| 欧美激情精品| 精品中文字幕一区二区三区四区| 麻豆成人av在线| 成人精品亚洲| 视频国产精品| 91日韩免费| 91精品啪在线观看国产18| 国产亚洲激情| 国产精选一区| 999国产精品视频| 中文字幕日韩高清在线 | av一区在线| 国产美女精品| 国产精品对白| 欧美日韩国产在线一区| 亚洲综合激情在线| 国产激情综合| 久久久久国产精品一区三寸| 好看的亚洲午夜视频在线| 偷拍欧美精品| 国产欧美日韩精品一区二区免费 | 视频一区二区三区中文字幕| 国产欧美久久一区二区三区| av高清不卡| 亚洲资源网站| 国产在线|日韩| 久久99久久人婷婷精品综合| 成人精品国产亚洲| 中文一区一区三区高中清不卡免费| 精品国产乱码久久久久久1区2匹| 久久不见久久见免费视频7| 国产精品亚洲一区二区三区在线观看| 国产综合婷婷| 色综合狠狠操| 美女精品久久| 亚洲福利久久| 欧美日韩1区2区3区| 日韩精品诱惑一区?区三区| 欧美色图一区| 精品一二三区| 婷婷视频一区二区三区| 另类专区亚洲| 国产精品久久久久77777丨 | 日韩精品亚洲专区在线观看| 久久精品亚洲一区二区| 亚欧成人精品| 伊人久久高清| 97精品97| 日韩国产网站| 99久久99久久精品国产片果冰 | 99久久精品网站| 蜜桃av在线播放| 91日韩欧美| 国产精品蜜芽在线观看| 国产精品成人a在线观看| 青青青免费在线视频| 亚洲在线成人| 亚洲欧洲日韩精品在线| 日韩欧美另类一区二区| 麻豆国产精品777777在线| 久久国产中文字幕|