package com.dsh.app.util.weChat;
|
|
import org.apache.commons.codec.binary.Base64;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Value;
|
|
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 java.io.UnsupportedEncodingException;
|
import java.security.InvalidAlgorithmParameterException;
|
import java.security.InvalidKeyException;
|
import java.security.NoSuchAlgorithmException;
|
import java.security.spec.AlgorithmParameterSpec;
|
|
public class WXCore {
|
|
private static Logger logger = LoggerFactory.getLogger(WXCore.class);
|
|
private static final String WATERMARK = "watermark";
|
|
@Value("${wx.appletsAppid}")
|
private static String appid ;
|
|
|
|
/**
|
* 解密数据
|
* @return
|
* @throws Exception
|
*/
|
public static String decrypt(String encryptedData, String sessionKey, String iv){
|
String result = "";
|
try {
|
AES aes = new AES();
|
byte[] resultByte = aes.decrypt(Base64.decodeBase64(encryptedData), Base64.decodeBase64(sessionKey), Base64.decodeBase64(iv));
|
if(null != resultByte && resultByte.length > 0){
|
result = new String(WxPKCS7Encoder.decode(resultByte), "UTF-8");
|
// JSONObject jsonObject = JSON.parseObject(result);
|
// String decryptAppid = jsonObject.getJSONObject(WATERMARK).getString("appid");
|
// if(!appid.equals(decryptAppid)){
|
// result = "";
|
// }
|
}
|
} catch (Exception e) {
|
result = "";
|
e.printStackTrace();
|
}
|
return result;
|
}
|
/**
|
* AES解密
|
*
|
* @param data //密文,被加密的数据
|
* @param key //秘钥
|
* @param iv //偏移量
|
* @return
|
* @throws Exception
|
*/
|
public static String decrypt1(String data, String key,String iv){
|
//被加密的数据
|
byte[] dataByte = Base64.decodeBase64(data);
|
//加密秘钥
|
byte[] keyByte = Base64.decodeBase64(key);
|
//偏移量
|
byte[] ivByte = Base64.decodeBase64(iv);
|
try {
|
AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivByte);
|
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
|
SecretKeySpec keySpec = new SecretKeySpec(keyByte, "AES");
|
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
|
return new String(cipher.doFinal(dataByte),"UTF-8");
|
} catch (NoSuchAlgorithmException e) {
|
e.printStackTrace();
|
} catch (NoSuchPaddingException e) {
|
e.printStackTrace();
|
} catch (InvalidKeyException e) {
|
e.printStackTrace();
|
} catch (InvalidAlgorithmParameterException e) {
|
e.printStackTrace();
|
} catch (IllegalBlockSizeException e) {
|
e.printStackTrace();
|
} catch (BadPaddingException e) {
|
e.printStackTrace();
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
/*public static void main(String[] args) throws Exception{
|
String appId = "wx4f4bc4dec97d474b";
|
String encryptedData = "CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZMQmRzooG2xrDcvSnxIMXFufNstNGTyaGS9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+3hVbJSRgv+4lGOETKUQz6OYStslQ142dNCuabNPGBzlooOmB231qMM85d2/fV6ChevvXvQP8Hkue1poOFtnEtpyxVLW1zAo6/1Xx1COxFvrc2d7UL/lmHInNlxuacJXwu0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn/Hz7saL8xz+W//FRAUid1OksQaQx4CMs8LOddcQhULW4ucetDf96JcR3g0gfRK4PC7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns/8wR2SiRS7MNACwTyrGvt9ts8p12PKFdlqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYVoKlaRv85IfVunYzO0IKXsyl7JCUjCpoG20f0a04COwfneQAGGwd5oa+T8yO5hzuyDb/XcxxmK01EpqOyuxINew==";
|
String sessionKey = "tiihtNczf5v6AKRyjwEUhQ==";
|
String iv = "r7BXXKkLb8qrSNn05n0qiA==";
|
logger.info(decrypt(encryptedData, sessionKey, iv));
|
}*/
|
}
|