import org.apache.commons.codec.binary.Base64; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.io.UnsupportedEncodingException; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; /** * 加密解密工具类 * @author qiaojun */ public class AesUtil { private static final String KEY = "l~8^%&^&@jmt6&&*"; private static final String IV = "(^&%^$qJU/K&^%%J"; /** * 加密 * * @param content 需要加密的内容 * key 加密密码,16位 * iv 偏移量,16位 */ public static String encrypt(String content) { try { //1.获取加密key的字节数组。生成AES密钥 // 注意,为了能与 iOS 统一 ,这里的 key 不可以使用 KeyGenerator、SecureRandom、SecretKey 生成 byte[] keyBytes = KEY.getBytes(); SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES"); //2.获取偏移量的字节数组,实例化IvParameterSpec对象 byte[] ivBytes = IV.getBytes(); IvParameterSpec ivParameterSpec = new IvParameterSpec(ivBytes); //3.指定加密的算法、工作模式和填充方式 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec); //4.获取加密内容的字节数组(这里要设置为utf-8),并进行ASE加密 byte[] contentBytes = content.getBytes("UTF-8"); byte[] encryptedBytes = cipher.doFinal(contentBytes); //5.将加密后的数据Base64加密,并转字符串返回 return new String(new Base64().encode(encryptedBytes)); } catch (NoSuchAlgorithmException | InvalidAlgorithmParameterException | UnsupportedEncodingException | BadPaddingException | IllegalBlockSizeException | InvalidKeyException | NoSuchPaddingException e) { e.printStackTrace(); } //如果有错就返加nulll return null; } /** * 解密 * * @param content 需要解密内容 * key 解密密钥,16位 * iv 偏移量,16位 */ public static String decrypt(String content) { try { //1.获取加密key的字节数组。生成AES密钥 // 注意,为了能与 iOS 统一,这里的 key 不可以使用 KeyGenerator、SecureRandom、SecretKey 生成 byte[] enCodeFormat = KEY.getBytes(); SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES"); //2.获取偏移量的字节数组,实例化IvParameterSpec对象 byte[] ivBytes = IV.getBytes(); IvParameterSpec ivParameterSpec = new IvParameterSpec(ivBytes); //3.指定加密的算法、工作模式和填充方式 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec); //4.将待解密内容进行Base64解码 byte [] contentBytes= new Base64().decode(content.getBytes()); //5.将Base64解码后的数据进行AES解密 byte[] decryptedBytes = cipher.doFinal(contentBytes); //6、解密后的数据转成字符串返回 return new String(decryptedBytes, "UTF-8"); } catch (NoSuchAlgorithmException | IllegalBlockSizeException | InvalidKeyException | NoSuchPaddingException | BadPaddingException | InvalidAlgorithmParameterException | UnsupportedEncodingException e) { e.printStackTrace(); } return null; } }
加密解密工具类
最新推荐文章于 2024-07-03 09:31:20 发布