AES对称加密,BASE64Decoder进行字节数据转化

1.下载处理为字节数组的工具类Jar包:sun.misc.BASE64Decoder.jar,,存放在我github的链接地址:https://github.com/zhangliqingyun/jarlist/blob/master/md5/sun.misc.BASE64Decoder.jar

2.java加密和解密代码实现

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;



import Decoder.BASE64Decoder;

import Decoder.BASE64Encoder;



/**

 * AES对称加密算法

 * @author 张立增

 *

 */



public class AESDemo {



//初始向量 AES为16bytes

public static final String INIT_KEY="1122334455667788";



//编码方式

public static final String UTF8 = "UTF-8";



//秘钥 AES固定格式为128/192/256 bits.即:16/24/32bytes。

private static final String AES_KEY = "1122334455667788";  



/**

 * 加密

 * @param 需要加密的字符串

 * 加密方式:AES128(CBC/PKCS5Padding)+Base64

 */

public static String encrypt(String encryptText){

try {

IvParameterSpec parameterSpec = new IvParameterSpec(INIT_KEY.getBytes());

//第一个参数为:秘钥字节数组 ,第二个参数为加密方式AES

SecretKeySpec key = new SecretKeySpec(AES_KEY.getBytes(),"AES");

//实例化加密类,参数为加密方式,PKCS5Padding比PKCS7Padding效率高,PKSC7Padding可支持IOS加密

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

    //初始化,此方法可以有三种方式,(1)无第三个参数(2)SecureRandom random = new SecureRandom();random对象为随机数,AES不可取(3)使用IvParameterSpec

//第一个参数表明是加密ENCRYPT_MODE

cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec);

    //执行加密操作,加密后的数据为字节数组

byte[] encryptedData = cipher.doFinal(encryptText.getBytes(UTF8));

//使用BASE64Encoder把字节数组转成字符串

String result = new BASE64Encoder().encode(encryptedData);

return result;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}



/**

 * 解密

 * @param 加密后的的字符串

 */

public static String decrypt(String decryptText){

try {

//使用BASE64Decoder().decodeBuffer把字符串转成字节数组

byte[] encryptByte = new BASE64Decoder().decodeBuffer(decryptText);

IvParameterSpec parameterSpec = new IvParameterSpec(INIT_KEY.getBytes());

SecretKeySpec key = new SecretKeySpec(AES_KEY.getBytes(),"AES");

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

cipher.init(Cipher.DECRYPT_MODE, key,parameterSpec);

byte[] decryptedData = cipher.doFinal(encryptByte);

String result = new String(decryptedData,UTF8);

return result;

} catch (Exception e) {

e.printStackTrace();

return null;

}



}





public static void main(String[] args) {

String encryptText = "我喜欢你";

System.out.println("加密前文本:"+encryptText);



String encryptResult = AESDemo.encrypt(encryptText);

System.out.println("加密后文本:"+encryptResult);



String decryptResult = AESDemo.decrypt(encryptResult);

System.out.println("解密后的文本:"+decryptResult);

}

}

 

你可能感兴趣的:(AES对称加密,BASE64Decoder进行字节数据转化)