package com.cross.bridge.prerecord.util; import java.io.UnsupportedEncodingException; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.IvParameterSpec; /** * @Describe: AES解密工具类 * @Author: Bridge * @Date: 2018/5/19 * @Version: 1.00 */ public class AES { private static final String ALGORITHM = "AES/CBC/PKCS5Padding"; private static final String HEXES = "0123456789ABCDEF"; //16进制字符串转换为字节数组 public static byte[] hexStringToByteArray(String s) { int len = s.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16)); } return data; } public static String byteArrayToHexString( byte [] raw ) { if ( raw == null ) { return null; } final StringBuilder hex = new StringBuilder( 2 * raw.length ); for ( final byte b : raw ) { hex.append(HEXES.charAt((b & 0xF0) >> 4)) .append(HEXES.charAt((b & 0x0F))); } return hex.toString(); } //加密 public static byte[] AES_cbc_encrypt(byte[] srcData,byte[] key) { try { SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); Cipher cipher = Cipher.getInstance(ALGORITHM); byte[] iv = Arrays.copyOfRange(key, 0, 16); cipher.init(Cipher.ENCRYPT_MODE, keySpec, new IvParameterSpec(iv)); byte[] encData = cipher.doFinal(srcData); return encData; } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } return null; } //解密 public static byte[] AES_cbc_decrypt(byte[] encData,byte[] key) { try { SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); Cipher cipher = Cipher.getInstance(ALGORITHM); byte[] iv = Arrays.copyOfRange(key, 0, 16); cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(iv)); byte[] decbbdt = cipher.doFinal(encData); return decbbdt; } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } return null; } public static void main(String args[]) { try { final String strPlain = "{\"bizSID\":\"1\",\"changedTime\":1521743161,\"desc\":\"新建\",\"sid\":\"-1\",\"status\":0,\"version\":\"1.0\"}"; final String strPassword = "12345678901234567890123456789012"; System.out.println("String to Encrypt: " + strPlain); String strCipher = byteArrayToHexString( AES_cbc_encrypt( strPlain.getBytes("UTF-8"), strPassword.getBytes("UTF-8") ) ); System.out.println("Encrypted: " + strCipher); String aesCbcDecrypt = new String(AES_cbc_decrypt( hexStringToByteArray(strCipher), strPassword.getBytes("UTF-8")), "UTF-8"); System.out.println("Decrypted : " +aesCbcDecrypt); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } }
AES解密工具类
猜你喜欢
转载自my.oschina.net/u/3854850/blog/1818871
今日推荐
周排行