New file |
| | |
| | | package com.kidgrow.common.utils; |
| | | |
| | | import org.apache.commons.codec.binary.Base64; |
| | | |
| | | import javax.crypto.Cipher; |
| | | import javax.crypto.spec.IvParameterSpec; |
| | | import javax.crypto.spec.SecretKeySpec; |
| | | |
| | | /** |
| | | * @Author: dougang |
| | | * @Description: |
| | | * @Date: create in 2020/6/19 10:44 |
| | | */ |
| | | public class AesUtils { |
| | | /** |
| | | * 十六位密钥 |
| | | */ |
| | | private static final String KEY = "66XiGaoKeJi@COM6"; |
| | | /** |
| | | * 十六位密钥偏移量 |
| | | */ |
| | | private static final String IV = "123#XIGAO.com456"; |
| | | |
| | | /** |
| | | * 加密方法 |
| | | * |
| | | * @param data 要加密的数据 |
| | | * @param key 加密key |
| | | * @param iv 加密iv |
| | | * @return 加密的结果 |
| | | * @throws Exception |
| | | */ |
| | | public static String encrypt(String data, String key, String iv) throws Exception { |
| | | try { |
| | | |
| | | Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); |
| | | int blockSize = cipher.getBlockSize(); |
| | | byte[] dataBytes = data.getBytes(); |
| | | int plaintextLength = dataBytes.length; |
| | | if (plaintextLength % blockSize != 0) { |
| | | plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize)); |
| | | } |
| | | byte[] plaintext = new byte[plaintextLength]; |
| | | System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length); |
| | | SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES"); |
| | | IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); |
| | | cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); |
| | | byte[] encrypted = cipher.doFinal(plaintext); |
| | | return new Base64().encodeToString(encrypted); |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 解密方法 |
| | | * |
| | | * @param data 要解密的数据 |
| | | * @param key 解密key |
| | | * @param iv 解密iv |
| | | * @return 解密的结果 |
| | | * @throws Exception |
| | | */ |
| | | public static String desEncrypt(String data, String key, String iv) throws Exception { |
| | | try { |
| | | byte[] encrypted1 = new Base64().decode(data); |
| | | Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); |
| | | SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES"); |
| | | IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); |
| | | cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec); |
| | | byte[] original = cipher.doFinal(encrypted1); |
| | | String originalString = new String(original).trim(); |
| | | return originalString; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 使用默认的key和iv加密 |
| | | * @param data |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static String encrypt(String data) throws Exception { |
| | | return encrypt(data, KEY, IV); |
| | | } |
| | | |
| | | /** |
| | | * 使用默认的key和iv解密 |
| | | * |
| | | * @param data |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static String desEncrypt(String data) throws Exception { |
| | | return desEncrypt(data, KEY, IV); |
| | | } |
| | | } |