AES算法下载&实战

108 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

每日英语:

Courage is the ladder on which all the other virtues mount.

翻译:勇气是一切美德攀登的阶梯。 ——克莱尔·布思·卢斯

AES算法下载

java 中的 AES 秘钥为256bit 算法执行时,会遇到 Illegal key size or default parameters 报错,原因是因为本地没有对应的算法库,需要下载对应JDK版本的算法库。

JDK8 jar 包下载地址:

www.oracle.com/java/techno…

JDK7 jar 包下载地址:

www.oracle.com/java/techno…

JDK6 jar 包下载地址:

www.oracle.com/java/techno…

下载后解压,可以看到local_policy.jarUS_export_policy.jar以及readme.txt。 如果安装了JRE,将两个jar文件放到%JRE_HOME%\lib\security目录下覆盖原来的文件。 如果安装了JDK,还要将两个jar文件也放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件。

AES算法实战

使用AES加密、解密,他们的执行过程都是一样的,步骤如下:

1:加载加密解密算法处理对象(包含算法、秘钥管理)
2:根据不同算法创建秘钥
3:设置加密模式(无论是加密还是解析,模式一致)
4:初始化加密配置
5:执行加密/解密

mall-common中引入算法依赖包

<!--算法依赖包-->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk16</artifactId>
    <version>1.46</version>
</dependency>

我们编写一个类com.xz.mall.util.AESUtil,既可以实现加密,也可以实现解密,代码如下:

/****
 * AES加密
 * @param buffer : 明文/密文
 * @param appsecret : 秘钥,16位
 * @param mode : 处理方式  1:加密,2:解密
 */
public static byte[] encryptAndDecrypt(byte[] buffer, String appsecret,Integer mode) throws Exception {
    //1、加载加密处理对象,该对象会提供加密算法、秘钥生成、秘钥转换、秘钥管理等功能
    Security.addProvider(new BouncyCastleProvider());
    //2、创建秘钥对象,并指定算法
    SecretKeySpec secretKey = new SecretKeySpec(appsecret.getBytes("UTF-8"),"AES");
    //3、设置Cipher的加密模式,AES/ECB/PKCS7Padding  BC指定算法对象(BouncyCastleProvider)
    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding","BC");
    //4、初始化加密配置
    cipher.init(mode,secretKey);
    //5、执行加密/解密
    return cipher.doFinal(buffer);
}

此处的秘钥为16byte(128bit),秘钥的长度可以为128/192/256 bit,我们测试如下:

public static void main(String[] args) throws Exception {
    //明文
    String content = "SpringCloud Alibaba!";
    //16位秘钥
    String key ="1616161616161616";
​
    //加密
    byte[] encrypt = encryptAndDecrypt(content.getBytes("UTF-8"), key, 1);
    System.out.println("加密后的密文:"+Base64Util.encode(encrypt));
    //解密
    byte[] decrypt = encryptAndDecrypt(encrypt, key, 2);
    System.out.println(new String(decrypt,"UTF-8"));
}

测试效果如下:

加密后的密文:y5wS5hE9rAPUu2//IDma20JhTWzekMCJ0+E0GP5xmaQ=
SpringCloud Alibaba!

我们如果使用256bit的秘钥,可以将当前秘钥转换成MD5值,MD5值长度为32,大小为256bit,正好满足256bit的秘钥,测试代码如下:

1606870964621.png

测试效果如下:

加密后的密文:B3s+4boCopYMEZKsFMue9UFBMdjkrNCyE2sMS9KXWEk=
SpringCloud Alibaba!

总结

本篇主要讲述了AES算法下载和ASE算法实战,有兴趣的可以自己尝试下载测试一下。