AES加密算法,JAVA实现示例

来源:互联网 发布:用u盘重装mac 编辑:程序博客网 时间:2024/06/06 07:28

最近项目上需要用到数据加密存储,查询资料后发现目前AES加密算法安全度非常高,具体原理可自行百度。但经网上搜到的JAVA实现示例运行都有各种问题,耗时一下午,终于调试运行成功,闲话少说,直接上代码。

import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;public class AesEncodeUtil {//初始向量public static final String VIPARA = "aabbccddeeffgghh";   //AES 为16bytes. DES 为8bytes//编码方式public static final String bm = "UTF-8";//私钥private static final String ASE_KEY="aabbccddeeffgghh";   //AES固定格式为128/192/256 bits.即:16/24/32bytes。DES固定格式为128bits,即8bytes。/** * 加密 *  * @param cleartext * @return */public static String encrypt(String cleartext) {//加密方式: AES128(CBC/PKCS5Padding) + Base64, 私钥:aabbccddeeffgghhtry {IvParameterSpec zeroIv = new IvParameterSpec(VIPARA.getBytes());//两个参数,第一个为私钥字节数组, 第二个为加密方式 AES或者DESSecretKeySpec key = new SecretKeySpec(ASE_KEY.getBytes(), "AES");//实例化加密类,参数为加密方式,要写全Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); //PKCS5Padding比PKCS7Padding效率高,PKCS7Padding可支持IOS加解密 //初始化,此方法可以采用三种方式,按加密算法要求来添加。(1)无第三个参数(2)第三个参数为SecureRandom random = new SecureRandom();中random对象,随机数。(AES不可采用这种方法)(3)采用此代码中的IVParameterSpeccipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);//加密操作,返回加密后的字节数组,然后需要编码。主要编解码方式有Base64, HEX, UUE,7bit等等。此处看服务器需要什么编码方式byte[] encryptedData = cipher.doFinal(cleartext.getBytes(bm));return new BASE64Encoder().encode(encryptedData);} catch (Exception e) {e.printStackTrace();return ""; }}/** * 解密 *  * @param encrypted * @return */public static String decrypt(String encrypted) {try {byte[] byteMi = new BASE64Decoder().decodeBuffer(encrypted);IvParameterSpec zeroIv = new IvParameterSpec(VIPARA.getBytes());SecretKeySpec key = new SecretKeySpec(ASE_KEY.getBytes(), "AES");Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//与加密时不同MODE:Cipher.DECRYPT_MODEcipher.init(Cipher.DECRYPT_MODE, key, zeroIv);byte[] decryptedData = cipher.doFinal(byteMi);return new String(decryptedData, bm);} catch (Exception e) {e.printStackTrace();return "";}}/** * 测试 *  * @param args * @throws Exception */public static void main(String[] args) throws Exception {String content = "98.5674";// 加密System.out.println("加密前:" + content);String encryptResult = encrypt(content);System.out.println("加密后:" + new String(encryptResult));// 解密String decryptResult = decrypt(encryptResult);System.out.println("解密后:" + new String(decryptResult));}}


1 0
原创粉丝点击