java碰球小程序,玩转小程序之解密微信运动数据(java版)

packagecom.pro.profwxappapi.util;

importjava.io.UnsupportedEncodingException;

importjava.security.AlgorithmParameters;

importjava.security.Security;

importjava.util.Arrays;

importjavax.crypto.Cipher;

importjavax.crypto.spec.IvParameterSpec;

importjavax.crypto.spec.SecretKeySpec;

importorg.apache.commons.codec.binary.Base64;

importorg.apache.commons.codec.digest.DigestUtils;

importorg.bouncycastle.jce.provider.BouncyCastleProvider;

importnet.sf.json.JSONObject;

publicclassSecretUtils {

privateSecretUtils(){}

publicstaticStringAES128CBCdecrypt(StringencryptedData,Stringiv,StringappId,StringsessionKey)throwsException {

// 被加密的数据

byte[]dataByte= Base64.decodeBase64(encryptedData);

// 加密秘钥

byte[]keyByte= Base64.decodeBase64(sessionKey);

// 偏移量

byte[]ivByte= Base64.decodeBase64(iv);

Security.addProvider(newBouncyCastleProvider());

Ciphercipher= Cipher.getInstance("AES/CBC/PKCS7Padding","BC");

SecretKeySpecspec=newSecretKeySpec(keyByte,"AES");

AlgorithmParametersparameters= AlgorithmParameters.getInstance("AES");

parameters.init(newIvParameterSpec(ivByte));

cipher.init(Cipher.DECRYPT_MODE,spec,parameters);// 初始化

byte[]resultByte=cipher.doFinal(dataByte);

if(null!=resultByte&&resultByte.length> 0) {

Stringresult=newString(resultByte,"UTF-8");

JSONObjectobj= JSONObject.fromObject(result);

JSONObjectwatermark=obj.getJSONObject("watermark");

if(!watermark.getString("appid").equals(appId)){

thrownewException("与小程序appid不符合");

}

if(System.currentTimeMillis()-watermark.getLong("timestamp")*1000>10000){

thrownewException("验证时间过长");

}

returnresult;

}

returnnull;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值