AES加密
AES 是一种可逆加密算法,对用户的敏感信息加密处理。
本文暂不深入AES原理,仅关注JAVA代码实现AES加解密。
JAVA代码实现
这是一个在线AES加密网站。从页面上我们可以看到如下几点:
AES加密模式:ECB/CBC/CTR/OFB/CFB
填充:pkcs5padding/pkcs7padding/zeropadding/iso10126/ansix923
数据块:128位/192位/256位
密码:【设置加解密的密码,JAVA中有效密码为16位/24位/32位,
其中24位/32位需要JCE(Java 密码扩展无限制权限策略文件,
每个JDK版本对应一个JCE,百度即可找到)】
偏移量:【iv偏移量,ECB不用设置】
输出:base64/hex
字符集:gb2312/gbk/gb18030/utf8
确保以上元素相互匹配,即可保证AES加解密无误。
JAVA代码实现
注意:建议加密密码为16位,避免密码位数不足补0,导致密码不一致,加解密错误。
IOS可设置任意长度的加密密码,JAVA只支持16位/24位/32位,不知能否实现任意长度,望大佬告之。
package cn.roylion.common.util;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
/**
* @Author: Roylion
* @Description: AES算法封装
* @Date: Created in 9:46 2018/8/9
*/
public class EncryptUtil{
/**
* 加密算法
*/
private static final String ENCRY_ALGORITHM = "AES";
/**
* 加密算法/加密模式/填充类型
* 本例采用AES加密,ECB加密模式,PKCS5Padding填充
*/
private static final String CIPHER_MODE = "AES/ECB/PKCS5Padding";
/**
* 设置iv偏移量
* 本例采用ECB加密模式,不需要设置iv偏移量
*/
private static final String IV_ = null;
/**
* 设置加密字符集
* 本例采用 UTF-8 字符集
*/
private static final String CHARACTER = "UTF-8";
/**
* 设置加密密码处理长度。
* 不足此长度补0;
*/
private static final int PWD_SIZE = 16;
/**