当前位置: > > > SpringBoot - 实用工具类库common-util使用详解6(AES加密解密:AESUtil)

SpringBoot - 实用工具类库common-util使用详解6(AES加密解密:AESUtil)

六、AES加密解密工具类(AESUtil)

1,基本介绍

(1)AES 算法是一种对称加密算法,现已经被多方分析且广为全世界所使用。要了解什么是对称加密算法,什么是非对称加密算法,可以参考我之前写的文章: 

(2)AESAdvanced Encryption Standard)中文叫作高级加密标准,是美国联邦政府采用的一种区块加密标准。为适应不同的安全性要求和传输需求,其允许在多种不同的加密模式下工作(ECBCBCCTRCFBOFB),关于 AES 更详细的介绍可以参考我之前写的文章:

(3)本文介绍的 AESUtil 是对常用的 AES 加解密进行封装,目前该工具类封装了两种加解密的模式:ECB 模式和 CBC 模式,并且填充模式是 PKCS5Padding

2,ECB 模式的加密解密

(1)加密解密字符串:
// 原始字符串
String str = "欢迎访问 hangge.com";
// 密钥
String key = "aespower98765432";

// 开始加密
String encrypted = AESUtil.encodeByECB(str, key);
// 输出结果
System.out.println("加密后字符串:" + encrypted);

// 开始解密
String decrypted = AESUtil.decodeByECB(encrypted, key);
// 输出结果
System.out.println("解密后字符串:" + decrypted);

(2)加密解密字节数组:
注意encryptByCBC 和 decryptByCBC 方法分别进行字节数组的加密和解密,常用于加密或解密第三方的秘串。因为这两个方法没有做任何多余实现,不像上面加解密字符串方法可能和第三方的实现不对等,从而造成解密失败。
// 原始字节数组
byte[] cotent = Base64.decode("5qyi6L+O6K6/6ZeuIGhhbmdnZS5jb20=");
// 密钥
byte[] key = Base64.decode("YWVzcG93ZXI5ODc2NTQzMg==");

// 开始加密
byte[] encrypted = AESUtil.encryptByECB(cotent, key);
// 输出结果
System.out.println("加密后字节数组:" + encrypted);

// 开始解密
byte[] decrypted = AESUtil.decryptByECB(encrypted, key);
// 输出结果
System.out.println("解密后字节数组:" + decrypted);
System.out.println("原始数据:" + new String(decrypted));

3,CBC 模式的加密解密

(1)加密解密字符串:
注意:与 ECB 模式模式不同,使用 CBC 模式加密时,除了提供一个密钥(key)外,还需要一个密钥偏移量(iv)。
// 原始字符串
String str = "欢迎访问 hangge.com";
// 密钥
String key = "aespower98765432";
// 密钥偏移量
String iv = "7201084316056726";

// 开始加密
String encrypted = AESUtil.encodeByCBC(str, key, iv);
// 输出结果
System.out.println("加密后字符串:" + encrypted);

// 开始解密
String decrypted = AESUtil.decodeByCBC(encrypted, key, iv);
// 输出结果
System.out.println("解密后字符串:" + decrypted);

(2)加密解密字节数组:
注意encryptByECBdecryptByECB 方法分别进行字节数组的加密和解密,常用于加密或解密第三方的秘串。因为这两个方法没有做任何多余实现,不像上面加解密字符串方法可能和第三方的实现不对等,从而造成解密失败。
// 原始字节数组
byte[] cotent = Base64.decode("5qyi6L+O6K6/6ZeuIGhhbmdnZS5jb20=");
// 密钥
byte[] key = Base64.decode("YWVzcG93ZXI5ODc2NTQzMg==");
// 密钥偏移量
byte[] iv = Base64.decode("NzIwMTA4NDMxNjA1NjcyNg==");

// 开始加密
byte[] encrypted = AESUtil.encryptByCBC(cotent, key, iv);
// 输出结果
System.out.println("加密后字节数组:" + encrypted);

// 开始解密
byte[] decrypted = AESUtil.decryptByCBC(encrypted, key, iv);
// 输出结果
System.out.println("解密后字节数组:" + decrypted);
System.out.println("原始数据:" + new String(decrypted));
评论0