Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 

102 строки
3.3 KiB

  1. package com.simple.utils;
  2. import org.bouncycastle.jce.provider.BouncyCastleProvider;
  3. import org.bouncycastle.util.encoders.Base64;
  4. import org.slf4j.Logger;
  5. import org.slf4j.LoggerFactory;
  6. import javax.crypto.Cipher;
  7. import javax.crypto.spec.IvParameterSpec;
  8. import javax.crypto.spec.SecretKeySpec;
  9. import java.security.Key;
  10. import java.security.Security;
  11. import java.util.Arrays;
  12. public class AesUtil {
  13. private static final Logger logger = LoggerFactory.getLogger(AesUtil.class);
  14. /**
  15. * 加密
  16. * 模式:AES/CBC/PKCS7Padding
  17. *
  18. * @param encodeRules 秘钥
  19. * @param content 加密串
  20. * @return
  21. */
  22. public static String AESEncode(String encodeRules, String content, String ivParameter) throws Exception {
  23. int base = 16;
  24. byte[] keybyte = encodeRules.getBytes("UTF-8");
  25. if (keybyte.length % base != 0) {
  26. int groups = keybyte.length / base + (keybyte.length % base != 0 ? 1 : 0);
  27. byte[] temp = new byte[groups * base];
  28. Arrays.fill(temp, (byte) 0);
  29. System.arraycopy(keybyte, 0, temp, 0, keybyte.length);
  30. keybyte = temp;
  31. }
  32. // 初始化
  33. Security.addProvider(new BouncyCastleProvider());
  34. // 转化成JAVA的密钥格式
  35. Key key = new SecretKeySpec(keybyte, "AES");
  36. try
  37. {
  38. // 初始化cipher
  39. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
  40. cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(ivParameter.getBytes()));
  41. byte[] encryptedText = cipher.doFinal(content.getBytes());
  42. return new String(new Base64().encode(encryptedText)).replaceAll("\r\n", "");
  43. } catch (
  44. Exception e)
  45. {
  46. logger.info("AESEncode error", e);
  47. }
  48. return null;
  49. }
  50. /**
  51. * 解密
  52. *
  53. * @param encodeRules 秘钥
  54. * @param content 解密串
  55. * @return
  56. */
  57. public static String AESDecode(String encodeRules, String content, String ivParameter) throws Exception {
  58. try {
  59. // 判断Key是否正确
  60. if (encodeRules == null) {
  61. logger.info("Key为空null");
  62. return null;
  63. }
  64. // 判断Key是否为16位
  65. if (encodeRules.length() != 16) {
  66. logger.info("Key长度不是16位");
  67. return null;
  68. }
  69. byte[] raw = encodeRules.getBytes("UTF-8");
  70. Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
  71. SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
  72. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
  73. IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
  74. cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
  75. try {
  76. byte[] encrypted1 = new Base64().decode(content);//先用base64解密
  77. byte[] original = cipher.doFinal(encrypted1);
  78. String originalString = new String(original);
  79. return originalString;
  80. } catch (Exception e) {
  81. logger.info(e.toString());
  82. return null;
  83. }
  84. } catch (Exception ex) {
  85. logger.info(ex.toString());
  86. return null;
  87. }
  88. }
  89. }