AppletDecryptDataUtil.java 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package utils;
  2. import com.alibaba.fastjson.JSONObject;
  3. import org.bouncycastle.jce.provider.BouncyCastleProvider;
  4. import javax.crypto.Cipher;
  5. import javax.crypto.spec.IvParameterSpec;
  6. import javax.crypto.spec.SecretKeySpec;
  7. import java.nio.charset.StandardCharsets;
  8. import java.security.AlgorithmParameters;
  9. import java.security.Security;
  10. import java.util.Arrays;
  11. /**
  12. * 解密工具
  13. */
  14. public class AppletDecryptDataUtil {
  15. public static JSONObject decryptData(byte[] keyByte, byte[] ivByte, byte[] dataByte) throws Exception {
  16. // 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
  17. int base = 16;
  18. if (keyByte.length % base != 0) {
  19. int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
  20. byte[] temp = new byte[groups * base];
  21. Arrays.fill(temp, (byte) 0);
  22. System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
  23. keyByte = temp;
  24. }
  25. byte[] resultByte;
  26. // 初始化
  27. Security.addProvider(new BouncyCastleProvider());
  28. try {
  29. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
  30. SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
  31. AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
  32. parameters.init(new IvParameterSpec(ivByte));
  33. cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
  34. resultByte = cipher.doFinal(dataByte);
  35. if (null == resultByte || resultByte.length <= 0) {
  36. return null;
  37. }
  38. }catch (Exception e){
  39. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");
  40. SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
  41. AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
  42. parameters.init(new IvParameterSpec(ivByte));
  43. cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
  44. resultByte = cipher.doFinal(dataByte);
  45. if (null == resultByte || resultByte.length <= 0) {
  46. return null;
  47. }
  48. }
  49. String result = new String(resultByte, StandardCharsets.UTF_8);
  50. return JSONObject.parseObject(result);
  51. }
  52. }