| | |
| | | package com.whyc.util; |
| | | |
| | | import com.whyc.constant.YamlProperties; |
| | | import com.whyc.exception.CryptException; |
| | | import org.apache.commons.codec.binary.Base64; |
| | | |
| | | import javax.crypto.Cipher; |
| | | import javax.crypto.SecretKey; |
| | | import javax.crypto.spec.IvParameterSpec; |
| | | import javax.crypto.spec.SecretKeySpec; |
| | | import java.security.GeneralSecurityException; |
| | | |
| | |
| | | System.out.println(test2); |
| | | } |
| | | |
| | | private static String defaultKey = "www.whyctech.com"; |
| | | private static String defaultKey = YamlProperties.aesDefaultKey; |
| | | private static byte[] key = defaultKey.getBytes(); |
| | | |
| | | private static String IV = YamlProperties.aesIv; |
| | | |
| | | |
| | | public static String aesEncrypt(String input) { |
| | |
| | | return result; |
| | | } |
| | | |
| | | /**加密*/ |
| | | /** |
| | | * 加密方法 |
| | | * @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"); |
| | | //Cipher cipher = Cipher.getInstance("CBC"); |
| | | 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); |
| | | 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, defaultKey, IV); |
| | | } |
| | | |
| | | /** |
| | | * 使用默认的key和iv解密 |
| | | * @param data |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public static String desEncrypt(String data){ |
| | | try { |
| | | return desEncrypt(data, defaultKey, IV); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | } |