java aes 工具类_Java中的AES加解密工具类:AESUtils

本人手写已测试,大家可以参考使用

package com.mirana.frame.utils.encrypt;

import com.mirana.frame.constants.SysConstants;

import com.mirana.frame.utils.RandomUtils;

import com.mirana.frame.utils.SysPropUtils;

import com.mirana.frame.utils.encrypt.enumtype.AESMode;

import com.mirana.frame.utils.encrypt.enumtype.Algorithm;

import com.mirana.frame.utils.encrypt.enumtype.Padding;

import org.apache.commons.codec.binary.Base64;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

import java.nio.charset.Charset;

import java.security.Security;

/**

* AES加解密工具类

*/

public class AESUtils {

// u8 charset

protected static final Charset CHARSET_U8 = SysConstants.DEFAULT_CHARSET;

// u8 string

protected static final String CHARSET_U8_STR = SysConstants.DEFAULT_CHARSET_NAME;

// 换行

protected static final String NEXTLINE = SysPropUtils.LINE_SEPARATOR;

/**

* AES加密

*

* @param algorithm 加密算法

* @param aesMode 加密模式

* @param padding 补码方式

* @param serectKey 秘钥

* @param ivKey 向量偏移量

* @param content 要加密的文本

* @return

*/

public static String encrypt (Algorithm algorithm, AESMode aesMode, Padding padding, String serectKey, String ivKey, String content) {

// 加密模式

String encryptMode = algorithm.getValue() + "/" + aesMode.getValue() + "/" + padding.getValue();

StringBuffer encryptStr = new StringBuffer();

encryptStr.append("--------- [ Encrypt ] 加密算法:" + encryptMode + " ----------");

encryptStr.append(NEXTLINE);

encryptStr.append("--------- [ Encrypt ] 算法:" + algorithm.getValue() + ", 加密模式:" + aesMode.getValue() + ",补码: " + padding.getValue() + " ----------");

encryptStr.append(NEXTLINE);

encryptStr.append("--------- [ Encrypt ] 秘钥:" + serectKey + ", 向量偏移量:" + ivKey + " ----------");

encryptStr.append(NEXTLINE);

encryptStr.append("--------- [ Encrypt ] 加密前数据:" + content + " ----------");

encryptStr.append(NEXTLINE);

String encyptedContent = null;

try {

// 1.根据指定算法AES自成密码器

String encyptType = encryptMode;

// 2.1 如果是NOPADDING,加密的字符bytes长度必须是16的倍数;

// 2.2 Java目前不支持ZEROPADDING

// 2.3 如果是PKCS7Padding,需要调用BouncyCastleProvider让java支持PKCS7Padding

switch (padding) {

case NO_PADDING:

int len = content.getBytes("UTF-8").length;

int m = len % 16;

if (m != 0) {

for (int i = 0; i < 16 - m; i++) {

content += " ";

}

}

break;

case ZERO_PADDING:

throw new IllegalArgumentException("抱歉,Java目前不支持" + Padding.ZERO_PADDING.getValue());

case PKCS7_PADDING:

Security.addProvider(new BouncyCastleProvider());

break;

default:

break;

}

SecretKeySpec keyspec = new SecretKeySpec(serectKey.getBytes(CHARSET_U8), algorithm.getValue());

// 3.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二个参数为使用的KEY,第三个参数为向量iv

Cipher cipher = Cipher.getInstance(encyptType);

// 4.ECB模式不需要使用IV,其他的模式都可以添加向量iv(不是必需)

switch (aesMode) {

case ECB:

cipher.init(Cipher.ENCRYPT_MODE, keyspec);

break;

default:

IvParameterSpec iv = new IvParameterSpec(ivKey.getBytes(CHARSET_U8));

cipher.init(Cipher.ENCRYPT_MODE, keyspec, iv);

break;

}

// 5.获取加密内容的字节数组(这里要设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码

byte[] byte_encode = content.getBytes(CHARSET_U8_STR);

// 6.根据密码器的初始化方式--加密:将数据加密

byte_encode = cipher.doFinal(byte_encode);

// 7.将加密后的数据转换为字符串

encyptedContent = new String(Base64.encodeBase64(byte_encode));

encryptStr.append("--------- [ Encrypt ] 加密后数据:" + encyptedContent + " ----------");

encryptStr.append(NEXTLINE);

encryptStr.append("--------- [ Encrypt success ] 加密数据成功 ----------");

encryptStr.append(NEXTLINE);

} catch (Exception e) {

encryptStr.append("--------- [ Encrypt failed ] 加密数据失败 ----------");

encryptStr.append(NEXTLINE);

e.printStackTrace();

}

System.out.println(encryptStr);

// 7.将字符串返回,错误返回null

return encyptedContent;

}

public static String decrypt (Algorithm algorithm, AESMode aesMode, Padding padding, String serectKey, String ivKey, String content) {

// 加密模式

String encryptMode = algorithm.getValue() + "/" + aesMode.getValue() + "/" + padding.getValue();

StringBuffer decryptLog = new StringBuffer();

decryptLog.append("--------- [ Decrypt ] 加密算法:" + encryptMode + " ----------");

decryptLog.append(NEXTLINE);

decryptLog.append("--------- [ Decrypt ] 算法:" + algorithm.getValue() + ", 加密模式:" + aesMode.getValue() + ",补码: " + padding.getValue() + " ----------");

decryptLog.append(NEXTLINE);

decryptLog.append("--------- [ Decrypt ] 秘钥:" + serectKey + ",向量 偏移量:" + ivKey + " ----------");

decryptLog.append(NEXTLINE);

decryptLog.append("--------- [ Decrypt ] 解密前数据:" + content + " ----------");

decryptLog.append(NEXTLINE);

String decryptContent = null;

try {

// 1.根据指定算法AES自成密码器

String encyptType = encryptMode;

// 2.1 如果是NOPADDING,加密的字符bytes长度必须是16的倍数;

// 2.2 Java目前不支持ZEROPADDING

// 2.3 如果是PKCS7Padding,需要调用BouncyCastleProvider让java支持PKCS7Padding

switch (padding) {

case NO_PADDING:

int len = content.getBytes("UTF-8").length;

int m = len % 16;

if (m != 0) {

for (int i = 0; i < 16 - m; i++) {

content += " ";

}

}

break;

case ZERO_PADDING:

throw new IllegalArgumentException("抱歉,Java目前不支持" + Padding.ZERO_PADDING.getValue());

case PKCS7_PADDING:

Security.addProvider(new BouncyCastleProvider());

break;

default:

break;

}

SecretKeySpec keyspec = new SecretKeySpec(serectKey.getBytes(CHARSET_U8), algorithm.getValue());

// 3.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二个参数为使用的KEY,第三个参数为向量iv

Cipher cipher = Cipher.getInstance(encyptType);

// 4.ECB模式不需要使用IV,其他的模式都可以添加向量iv(不是必需)

switch (aesMode) {

case ECB:

cipher.init(Cipher.DECRYPT_MODE, keyspec);

break;

default:

IvParameterSpec iv = new IvParameterSpec(ivKey.getBytes(CHARSET_U8));

cipher.init(Cipher.DECRYPT_MODE, keyspec, iv);

break;

}

// 5.将加密并编码后的内容解码成字节数组

byte[] byte_content = Base64.decodeBase64(content);

// 6.AES解密

byte_content = cipher.doFinal(byte_content);

// 7.使用u8生成解密字符串

decryptContent = new String(byte_content, CHARSET_U8_STR);

decryptLog.append("--------- [ Decrypt ] 解密后数据:" + decryptContent + " ----------");

decryptLog.append(NEXTLINE);

decryptLog.append("--------- [ Decrypt success ] 解密数据成功 ----------");

decryptLog.append(NEXTLINE);

} catch (Exception e) {

decryptLog.append("--------- [ Decrypt failed ] 解密数据失败 ----------");

decryptLog.append(NEXTLINE);

e.printStackTrace();

}

System.out.println(decryptLog);

// 7.将字符串返回,错误返回null

return decryptContent;

}

/**

* 测试AES加密算法

*

* @param algorithm 算法

* @param aesMode 加密模式

* @param padding 补码

* @param serectKeyLength 秘钥key长度

* @param ivKeyLength 向量iv长度*/

private static void testAESEncrypt (Algorithm algorithm, AESMode aesMode, Padding padding, int serectKeyLength, int ivKeyLength) {

String originalStr = "这是一个没有固定长度的测试的字符串";

String serectKey = RandomUtils.getString(serectKeyLength);

String ivKey = RandomUtils.getString(ivKeyLength);

String encryptContent = encrypt(algorithm, aesMode, padding, serectKey, ivKey, originalStr);

String decryptContent = decrypt(algorithm, aesMode, padding, serectKey, ivKey, encryptContent);

System.out.println("原字符串: " + originalStr);

System.out.println("加密后字符串: " + encryptContent);

System.out.println("解密后字符串: " + decryptContent);

System.out.println("");

}

public static void main (String[] args) {

// // AES/CBC/*

//

// // AES/CBC/NO_PADDING

// testAESEncrypt(Algorithm.AES, AESMode.CBC, Padding.NO_PADDING, 16, 16);

// // AES/CBC/PKCS5Padding

// testAESEncrypt(Algorithm.AES, AESMode.CBC, Padding.PKCS5_PADDING, 16, 16);

// // AES/CBC/PKCS7Padding

// testAESEncrypt(Algorithm.AES, AESMode.CBC, Padding.PKCS7_PADDING, 16, 16);

// // AES/CBC/ISO10126Padding

// testAESEncrypt(Algorithm.AES, AESMode.CBC, Padding.ISO10126Padding, 16, 16);

// ********************************************************************

// // AES/ECB/*

//

// // AES/ECB/NO_PADDING

// testAESEncrypt(Algorithm.AES, AESMode.ECB, Padding.NO_PADDING, 16, 16);

// // AES/ECB/PKCS5_PADDING

// testAESEncrypt(Algorithm.AES, AESMode.ECB, Padding.PKCS5_PADDING, 16, 16);

// // AES/ECB/PKCS7_PADDING

// testAESEncrypt(Algorithm.AES, AESMode.ECB, Padding.PKCS7_PADDING, 16, 16);

// // AES/ECB/ISO10126Padding

// testAESEncrypt(Algorithm.AES, AESMode.ECB, Padding.ISO10126Padding, 16, 16);

// ********************************************************************

// // AES/CFB/*

//

// // AES/CFB/NO_PADDING

// testAESEncrypt(Algorithm.AES, AESMode.CFB, Padding.NO_PADDING, 16, 16);

// // AES/CFB/PKCS5_PADDING

// testAESEncrypt(Algorithm.AES, AESMode.CFB, Padding.PKCS5_PADDING, 16, 16);

// // AES/CFB/PKCS7_PADDING

// testAESEncrypt(Algorithm.AES, AESMode.CFB, Padding.PKCS7_PADDING, 16, 16);

// // AES/CFB/ISO10126Padding

// testAESEncrypt(Algorithm.AES, AESMode.CFB, Padding.ISO10126Padding, 16, 16);

// ********************************************************************

// // AES/CTR/*

//

// // AES/CTR/NO_PADDING

// testAESEncrypt(Algorithm.AES, AESMode.CTR, Padding.NO_PADDING, 16, 16);

// // AES/CTR/PKCS5_PADDING

// testAESEncrypt(Algorithm.AES, AESMode.CTR, Padding.PKCS5_PADDING, 16, 16);

// // AES/CTR/PKCS7_PADDING

// testAESEncrypt(Algorithm.AES, AESMode.CTR, Padding.PKCS7_PADDING, 16, 16);

// // AES/CTR/ISO10126Padding

// testAESEncrypt(Algorithm.AES, AESMode.CTR, Padding.ISO10126Padding, 16, 16);

// ********************************************************************

// AES/OFB/*

//

// AES/OFB/NO_PADDING

testAESEncrypt(Algorithm.AES, AESMode.OFB, Padding.NO_PADDING, 16, 16);

// AES/OFB/PKCS5_PADDING

testAESEncrypt(Algorithm.AES, AESMode.OFB, Padding.PKCS5_PADDING, 16, 16);

// AES/OFB/PKCS7_PADDING

testAESEncrypt(Algorithm.AES, AESMode.OFB, Padding.PKCS7_PADDING, 16, 16);

// AES/OFB/ISO10126Padding

testAESEncrypt(Algorithm.AES, AESMode.OFB, Padding.ISO10126Padding, 16, 16);

}

}

AES/CBC/*,测试输出:

--------- [ Encrypt ] 加密算法:AES/CBC/NoPadding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:CBC,补码: NoPadding ----------

--------- [ Encrypt ] 秘钥:6AC587CB373C4629, 向量偏移量:EBC9591C109547AC ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:woWJayaezRlTAZAwwo0f6rKd3QGwY4kwyeVcwERMnMrFJWigAKeRgghmaPVi+eRqnfZrYGUWVy+e9QAuIN4CtQ== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/CBC/NoPadding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:CBC,补码: NoPadding ----------

--------- [ Decrypt ] 秘钥:6AC587CB373C4629,向量 偏移量:EBC9591C109547AC ----------

--------- [ Decrypt ] 解密前数据:woWJayaezRlTAZAwwo0f6rKd3QGwY4kwyeVcwERMnMrFJWigAKeRgghmaPVi+eRqnfZrYGUWVy+e9QAuIN4CtQ== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: woWJayaezRlTAZAwwo0f6rKd3QGwY4kwyeVcwERMnMrFJWigAKeRgghmaPVi+eRqnfZrYGUWVy+e9QAuIN4CtQ==

解密后字符串: 这是一个没有固定长度的测试的字符串

--------- [ Encrypt ] 加密算法:AES/CBC/PKCS5Padding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:CBC,补码: PKCS5Padding ----------

--------- [ Encrypt ] 秘钥:C1A4F2FD73AA4497, 向量偏移量:45A85E8876BC45B3 ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:HHN4NMy9sJx/LJX2ktHg0ZMhvYjcLFTBe6fPBD08Mcf1n+Epv/ymd47d+tmfivoLrjjlUo+WN5y2qkKmtZPWeA== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/CBC/PKCS5Padding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:CBC,补码: PKCS5Padding ----------

--------- [ Decrypt ] 秘钥:C1A4F2FD73AA4497,向量 偏移量:45A85E8876BC45B3 ----------

--------- [ Decrypt ] 解密前数据:HHN4NMy9sJx/LJX2ktHg0ZMhvYjcLFTBe6fPBD08Mcf1n+Epv/ymd47d+tmfivoLrjjlUo+WN5y2qkKmtZPWeA== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: HHN4NMy9sJx/LJX2ktHg0ZMhvYjcLFTBe6fPBD08Mcf1n+Epv/ymd47d+tmfivoLrjjlUo+WN5y2qkKmtZPWeA==

解密后字符串: 这是一个没有固定长度的测试的字符串

--------- [ Encrypt ] 加密算法:AES/CBC/PKCS7Padding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:CBC,补码: PKCS7Padding ----------

--------- [ Encrypt ] 秘钥:543C44AA40C24780, 向量偏移量:5DAF6CE309044D52 ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:iQEvpBVx3gX+bzDykW0WSvfVd0aqRG17q82asC/QsDWD2nqScl4peGZhedgRHLo54gcJNMgPVjmS2Uib5PHBww== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/CBC/PKCS7Padding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:CBC,补码: PKCS7Padding ----------

--------- [ Decrypt ] 秘钥:543C44AA40C24780,向量 偏移量:5DAF6CE309044D52 ----------

--------- [ Decrypt ] 解密前数据:iQEvpBVx3gX+bzDykW0WSvfVd0aqRG17q82asC/QsDWD2nqScl4peGZhedgRHLo54gcJNMgPVjmS2Uib5PHBww== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: iQEvpBVx3gX+bzDykW0WSvfVd0aqRG17q82asC/QsDWD2nqScl4peGZhedgRHLo54gcJNMgPVjmS2Uib5PHBww==

解密后字符串: 这是一个没有固定长度的测试的字符串

--------- [ Encrypt ] 加密算法:AES/CBC/ISO10126Padding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:CBC,补码: ISO10126Padding ----------

--------- [ Encrypt ] 秘钥:F22B64EF4024479F, 向量偏移量:0F62A6138C934A6D ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:rb+fi0H6aiezRXc7vDiCj/FK5jecV5oVYPaGeen9gI/Or9PDk9DMHdu44u09LcmmpuIbDW7S5gNt6u7cea/Fsg== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/CBC/ISO10126Padding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:CBC,补码: ISO10126Padding ----------

--------- [ Decrypt ] 秘钥:F22B64EF4024479F,向量 偏移量:0F62A6138C934A6D ----------

--------- [ Decrypt ] 解密前数据:rb+fi0H6aiezRXc7vDiCj/FK5jecV5oVYPaGeen9gI/Or9PDk9DMHdu44u09LcmmpuIbDW7S5gNt6u7cea/Fsg== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: rb+fi0H6aiezRXc7vDiCj/FK5jecV5oVYPaGeen9gI/Or9PDk9DMHdu44u09LcmmpuIbDW7S5gNt6u7cea/Fsg==

解密后字符串: 这是一个没有固定长度的测试的字符串

AES/ECB/*,测试输出:

--------- [ Encrypt ] 加密算法:AES/ECB/NoPadding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:ECB,补码: NoPadding ----------

--------- [ Encrypt ] 秘钥:8DE67AB814CB4E1D, 向量偏移量:6C7AA2934E2241C4 ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:nf5e8bxSnhpbOblsga54XxmqIytpXQG6Aim9VAXKx/nIH9Bc2akXOwwkUGwpJazC1yYwzm0ydeH+EQ437W7dUw== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/ECB/NoPadding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:ECB,补码: NoPadding ----------

--------- [ Decrypt ] 秘钥:8DE67AB814CB4E1D,向量 偏移量:6C7AA2934E2241C4 ----------

--------- [ Decrypt ] 解密前数据:nf5e8bxSnhpbOblsga54XxmqIytpXQG6Aim9VAXKx/nIH9Bc2akXOwwkUGwpJazC1yYwzm0ydeH+EQ437W7dUw== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: nf5e8bxSnhpbOblsga54XxmqIytpXQG6Aim9VAXKx/nIH9Bc2akXOwwkUGwpJazC1yYwzm0ydeH+EQ437W7dUw==

解密后字符串: 这是一个没有固定长度的测试的字符串

--------- [ Encrypt ] 加密算法:AES/ECB/PKCS5Padding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:ECB,补码: PKCS5Padding ----------

--------- [ Encrypt ] 秘钥:8B2A01576D554DF0, 向量偏移量:A8968C7DFE5B41E0 ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:vxlE6f4pcWvt9v6Qdl5OyEBSNgTLedVyoEaGQYKchoDj5iZNDC8yUk82wDTmxQTJaFJskitvH89JCtCuKP/4jg== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/ECB/PKCS5Padding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:ECB,补码: PKCS5Padding ----------

--------- [ Decrypt ] 秘钥:8B2A01576D554DF0,向量 偏移量:A8968C7DFE5B41E0 ----------

--------- [ Decrypt ] 解密前数据:vxlE6f4pcWvt9v6Qdl5OyEBSNgTLedVyoEaGQYKchoDj5iZNDC8yUk82wDTmxQTJaFJskitvH89JCtCuKP/4jg== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: vxlE6f4pcWvt9v6Qdl5OyEBSNgTLedVyoEaGQYKchoDj5iZNDC8yUk82wDTmxQTJaFJskitvH89JCtCuKP/4jg==

解密后字符串: 这是一个没有固定长度的测试的字符串

--------- [ Encrypt ] 加密算法:AES/ECB/PKCS7Padding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:ECB,补码: PKCS7Padding ----------

--------- [ Encrypt ] 秘钥:444BE9008BF641CC, 向量偏移量:1BC7A338376F40FD ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:7UOL6EVv1cZnJBlP4y7OFIIjD4rFFE/dhc/fxsyK/7ADhYMO/VM41O1fzDsqPcKrQ6CJWvvs7wgYd3iVAdQV5A== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/ECB/PKCS7Padding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:ECB,补码: PKCS7Padding ----------

--------- [ Decrypt ] 秘钥:444BE9008BF641CC,向量 偏移量:1BC7A338376F40FD ----------

--------- [ Decrypt ] 解密前数据:7UOL6EVv1cZnJBlP4y7OFIIjD4rFFE/dhc/fxsyK/7ADhYMO/VM41O1fzDsqPcKrQ6CJWvvs7wgYd3iVAdQV5A== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: 7UOL6EVv1cZnJBlP4y7OFIIjD4rFFE/dhc/fxsyK/7ADhYMO/VM41O1fzDsqPcKrQ6CJWvvs7wgYd3iVAdQV5A==

解密后字符串: 这是一个没有固定长度的测试的字符串

--------- [ Encrypt ] 加密算法:AES/ECB/ISO10126Padding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:ECB,补码: ISO10126Padding ----------

--------- [ Encrypt ] 秘钥:A5C275229A294B5E, 向量偏移量:EDE8FCD30D754440 ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:J/auLz3vRV1nPIf7MHh1RPMEFlAbGFS7AyZeZJB0mdrl+ZmWlRVa4elbm0hHWVbjWcGiWCjZJ3LSIOXCYDIhUA== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/ECB/ISO10126Padding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:ECB,补码: ISO10126Padding ----------

--------- [ Decrypt ] 秘钥:A5C275229A294B5E,向量 偏移量:EDE8FCD30D754440 ----------

--------- [ Decrypt ] 解密前数据:J/auLz3vRV1nPIf7MHh1RPMEFlAbGFS7AyZeZJB0mdrl+ZmWlRVa4elbm0hHWVbjWcGiWCjZJ3LSIOXCYDIhUA== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: J/auLz3vRV1nPIf7MHh1RPMEFlAbGFS7AyZeZJB0mdrl+ZmWlRVa4elbm0hHWVbjWcGiWCjZJ3LSIOXCYDIhUA==

解密后字符串: 这是一个没有固定长度的测试的字符串

AES/CFB/*,测试输出:

--------- [ Encrypt ] 加密算法:AES/CFB/NoPadding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:CFB,补码: NoPadding ----------

--------- [ Encrypt ] 秘钥:2D8D04BF6B82403C, 向量偏移量:5ED121C9F82A451E ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:NzxJu+Ojkaati0X6Ys05V29Jaci0cnnOTiEQif2PN00g7xq/5GGzrJC8QFd76stQHccthh4+yJONpJQfkwF6Sg== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/CFB/NoPadding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:CFB,补码: NoPadding ----------

--------- [ Decrypt ] 秘钥:2D8D04BF6B82403C,向量 偏移量:5ED121C9F82A451E ----------

--------- [ Decrypt ] 解密前数据:NzxJu+Ojkaati0X6Ys05V29Jaci0cnnOTiEQif2PN00g7xq/5GGzrJC8QFd76stQHccthh4+yJONpJQfkwF6Sg== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: NzxJu+Ojkaati0X6Ys05V29Jaci0cnnOTiEQif2PN00g7xq/5GGzrJC8QFd76stQHccthh4+yJONpJQfkwF6Sg==

解密后字符串: 这是一个没有固定长度的测试的字符串

--------- [ Encrypt ] 加密算法:AES/CFB/PKCS5Padding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:CFB,补码: PKCS5Padding ----------

--------- [ Encrypt ] 秘钥:357619F14C964136, 向量偏移量:68D8B163C9BF47D9 ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:uuCGtpKDA9YfSCynXmmOrUOS2aYKOizDqoHVbHt+ZZpzJwPaQ//aDkyiHE5Ot3jaAaF6/aFC0YrufqXNI4PBgA== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/CFB/PKCS5Padding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:CFB,补码: PKCS5Padding ----------

--------- [ Decrypt ] 秘钥:357619F14C964136,向量 偏移量:68D8B163C9BF47D9 ----------

--------- [ Decrypt ] 解密前数据:uuCGtpKDA9YfSCynXmmOrUOS2aYKOizDqoHVbHt+ZZpzJwPaQ//aDkyiHE5Ot3jaAaF6/aFC0YrufqXNI4PBgA== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: uuCGtpKDA9YfSCynXmmOrUOS2aYKOizDqoHVbHt+ZZpzJwPaQ//aDkyiHE5Ot3jaAaF6/aFC0YrufqXNI4PBgA==

解密后字符串: 这是一个没有固定长度的测试的字符串

--------- [ Encrypt ] 加密算法:AES/CFB/PKCS7Padding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:CFB,补码: PKCS7Padding ----------

--------- [ Encrypt ] 秘钥:67DA51FE61514AFB, 向量偏移量:44B21C81448B4556 ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:+kTQ3J3U8HtewHsrAZG3ps/1IuOSZlEw0nMlaeL4FW1XLA8TZ6XK+ztUfdEh6EoMboAtqs53EhsYumm8R3ap/Q== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/CFB/PKCS7Padding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:CFB,补码: PKCS7Padding ----------

--------- [ Decrypt ] 秘钥:67DA51FE61514AFB,向量 偏移量:44B21C81448B4556 ----------

--------- [ Decrypt ] 解密前数据:+kTQ3J3U8HtewHsrAZG3ps/1IuOSZlEw0nMlaeL4FW1XLA8TZ6XK+ztUfdEh6EoMboAtqs53EhsYumm8R3ap/Q== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: +kTQ3J3U8HtewHsrAZG3ps/1IuOSZlEw0nMlaeL4FW1XLA8TZ6XK+ztUfdEh6EoMboAtqs53EhsYumm8R3ap/Q==

解密后字符串: 这是一个没有固定长度的测试的字符串

--------- [ Encrypt ] 加密算法:AES/CFB/ISO10126Padding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:CFB,补码: ISO10126Padding ----------

--------- [ Encrypt ] 秘钥:A8E2F09BCD774223, 向量偏移量:FA7127821BCD4017 ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:y7IFAcR0s++uzNtpLZGQLDJ4vLph/nh/+HxTN6+9OyWUuD8Bf1VdIHL+Bi7XcSic4Wq3IsXUl9c/qh8GpLH3nQ== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/CFB/ISO10126Padding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:CFB,补码: ISO10126Padding ----------

--------- [ Decrypt ] 秘钥:A8E2F09BCD774223,向量 偏移量:FA7127821BCD4017 ----------

--------- [ Decrypt ] 解密前数据:y7IFAcR0s++uzNtpLZGQLDJ4vLph/nh/+HxTN6+9OyWUuD8Bf1VdIHL+Bi7XcSic4Wq3IsXUl9c/qh8GpLH3nQ== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: y7IFAcR0s++uzNtpLZGQLDJ4vLph/nh/+HxTN6+9OyWUuD8Bf1VdIHL+Bi7XcSic4Wq3IsXUl9c/qh8GpLH3nQ==

解密后字符串: 这是一个没有固定长度的测试的字符串

AES/CTR/*,测试输出:

--------- [ Encrypt ] 加密算法:AES/CTR/NoPadding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:CTR,补码: NoPadding ----------

--------- [ Encrypt ] 秘钥:33812BC2AFEF4D28, 向量偏移量:C974012F5CEA489B ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:4zLJWUfPzuFxhfZScOMDAUZHVV5r7nWd9bqoOJ530XPrSVC7hlw59Lh0P0695p4RyT0wlRzlBgny7LskEvk2uA== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/CTR/NoPadding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:CTR,补码: NoPadding ----------

--------- [ Decrypt ] 秘钥:33812BC2AFEF4D28,向量 偏移量:C974012F5CEA489B ----------

--------- [ Decrypt ] 解密前数据:4zLJWUfPzuFxhfZScOMDAUZHVV5r7nWd9bqoOJ530XPrSVC7hlw59Lh0P0695p4RyT0wlRzlBgny7LskEvk2uA== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: 4zLJWUfPzuFxhfZScOMDAUZHVV5r7nWd9bqoOJ530XPrSVC7hlw59Lh0P0695p4RyT0wlRzlBgny7LskEvk2uA==

解密后字符串: 这是一个没有固定长度的测试的字符串

--------- [ Encrypt ] 加密算法:AES/CTR/PKCS5Padding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:CTR,补码: PKCS5Padding ----------

--------- [ Encrypt ] 秘钥:1D98BAD34AE94641, 向量偏移量:091226AB46B44502 ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:rXHbLqijNiBvvcrk34MblERIfL/AjRsho/IhpmrasAuFjZF8X+9j73X92EnmFXLrS5Kz ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/CTR/PKCS5Padding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:CTR,补码: PKCS5Padding ----------

--------- [ Decrypt ] 秘钥:1D98BAD34AE94641,向量 偏移量:091226AB46B44502 ----------

--------- [ Decrypt ] 解密前数据:rXHbLqijNiBvvcrk34MblERIfL/AjRsho/IhpmrasAuFjZF8X+9j73X92EnmFXLrS5Kz ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: rXHbLqijNiBvvcrk34MblERIfL/AjRsho/IhpmrasAuFjZF8X+9j73X92EnmFXLrS5Kz

解密后字符串: 这是一个没有固定长度的测试的字符串

--------- [ Encrypt ] 加密算法:AES/CTR/PKCS7Padding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:CTR,补码: PKCS7Padding ----------

--------- [ Encrypt ] 秘钥:A7AFF087BCEA4CB3, 向量偏移量:C6F372061F87400C ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:nZt2UvnEMpsOdM9Ze2B5qQYws4sVbjqg6PzLRSuQRkUkapzGR98oEkt/DqBBCiEHmvVrjzQO8cPW0dG3Owh1RQ== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/CTR/PKCS7Padding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:CTR,补码: PKCS7Padding ----------

--------- [ Decrypt ] 秘钥:A7AFF087BCEA4CB3,向量 偏移量:C6F372061F87400C ----------

--------- [ Decrypt ] 解密前数据:nZt2UvnEMpsOdM9Ze2B5qQYws4sVbjqg6PzLRSuQRkUkapzGR98oEkt/DqBBCiEHmvVrjzQO8cPW0dG3Owh1RQ== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: nZt2UvnEMpsOdM9Ze2B5qQYws4sVbjqg6PzLRSuQRkUkapzGR98oEkt/DqBBCiEHmvVrjzQO8cPW0dG3Owh1RQ==

解密后字符串: 这是一个没有固定长度的测试的字符串

--------- [ Encrypt ] 加密算法:AES/CTR/ISO10126Padding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:CTR,补码: ISO10126Padding ----------

--------- [ Encrypt ] 秘钥:9CB9134F56294E57, 向量偏移量:2F53A1CBE07E467B ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:ngt4WKtqwsI7SINPnWddpSijd+zabWbLMqmFk5z1lo6kaW9oPXx536MHWRbfqCbmNFy+n2TJ178bE2Y5NoQPZw== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/CTR/ISO10126Padding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:CTR,补码: ISO10126Padding ----------

--------- [ Decrypt ] 秘钥:9CB9134F56294E57,向量 偏移量:2F53A1CBE07E467B ----------

--------- [ Decrypt ] 解密前数据:ngt4WKtqwsI7SINPnWddpSijd+zabWbLMqmFk5z1lo6kaW9oPXx536MHWRbfqCbmNFy+n2TJ178bE2Y5NoQPZw== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: ngt4WKtqwsI7SINPnWddpSijd+zabWbLMqmFk5z1lo6kaW9oPXx536MHWRbfqCbmNFy+n2TJ178bE2Y5NoQPZw==

解密后字符串: 这是一个没有固定长度的测试的字符串

AES/OFB/*,测试输出:

--------- [ Encrypt ] 加密算法:AES/OFB/NoPadding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:OFB,补码: NoPadding ----------

--------- [ Encrypt ] 秘钥:CF6B28476B434496, 向量偏移量:894C3C61F7EC4808 ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:dxWt2Fw9n6/D5pRaq4qx5SeqMB0WnKoyoi+ircoDaYNywjHBNqZ+AkFQbvHHu95ITw8sufbcsJGQX6lFDwPbVA== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/OFB/NoPadding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:OFB,补码: NoPadding ----------

--------- [ Decrypt ] 秘钥:CF6B28476B434496,向量 偏移量:894C3C61F7EC4808 ----------

--------- [ Decrypt ] 解密前数据:dxWt2Fw9n6/D5pRaq4qx5SeqMB0WnKoyoi+ircoDaYNywjHBNqZ+AkFQbvHHu95ITw8sufbcsJGQX6lFDwPbVA== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: dxWt2Fw9n6/D5pRaq4qx5SeqMB0WnKoyoi+ircoDaYNywjHBNqZ+AkFQbvHHu95ITw8sufbcsJGQX6lFDwPbVA==

解密后字符串: 这是一个没有固定长度的测试的字符串

--------- [ Encrypt ] 加密算法:AES/OFB/PKCS5Padding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:OFB,补码: PKCS5Padding ----------

--------- [ Encrypt ] 秘钥:B49117B4A4964EFF, 向量偏移量:E8CF95FF1D2A4A74 ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:gQDGEqp2G8Mt5ayuFf8B+UyM2L7rwlHIiAWUgc/SkoMQHP/7e7fk/gsSxQY9ZAM3Ql6AE58LA0mWoM604VbUAA== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/OFB/PKCS5Padding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:OFB,补码: PKCS5Padding ----------

--------- [ Decrypt ] 秘钥:B49117B4A4964EFF,向量 偏移量:E8CF95FF1D2A4A74 ----------

--------- [ Decrypt ] 解密前数据:gQDGEqp2G8Mt5ayuFf8B+UyM2L7rwlHIiAWUgc/SkoMQHP/7e7fk/gsSxQY9ZAM3Ql6AE58LA0mWoM604VbUAA== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: gQDGEqp2G8Mt5ayuFf8B+UyM2L7rwlHIiAWUgc/SkoMQHP/7e7fk/gsSxQY9ZAM3Ql6AE58LA0mWoM604VbUAA==

解密后字符串: 这是一个没有固定长度的测试的字符串

--------- [ Encrypt ] 加密算法:AES/OFB/PKCS7Padding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:OFB,补码: PKCS7Padding ----------

--------- [ Encrypt ] 秘钥:7F2C5D507B5041BA, 向量偏移量:357F871961A84E3F ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:shuo1qyEvWi7KxdDRSTniZcZKRdgaZnZvbgovlA0ctyOFV5jnPGWhaP0Vl53E39UKfUwrBeFYWB6xYf4fsY3zQ== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/OFB/PKCS7Padding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:OFB,补码: PKCS7Padding ----------

--------- [ Decrypt ] 秘钥:7F2C5D507B5041BA,向量 偏移量:357F871961A84E3F ----------

--------- [ Decrypt ] 解密前数据:shuo1qyEvWi7KxdDRSTniZcZKRdgaZnZvbgovlA0ctyOFV5jnPGWhaP0Vl53E39UKfUwrBeFYWB6xYf4fsY3zQ== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: shuo1qyEvWi7KxdDRSTniZcZKRdgaZnZvbgovlA0ctyOFV5jnPGWhaP0Vl53E39UKfUwrBeFYWB6xYf4fsY3zQ==

解密后字符串: 这是一个没有固定长度的测试的字符串

--------- [ Encrypt ] 加密算法:AES/OFB/ISO10126Padding ----------

--------- [ Encrypt ] 算法:AES, 加密模式:OFB,补码: ISO10126Padding ----------

--------- [ Encrypt ] 秘钥:0746E45280884C87, 向量偏移量:2EBF60DEE1F14462 ----------

--------- [ Encrypt ] 加密前数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Encrypt ] 加密后数据:OpgpMES7fA6fIANe8EGEXirfEty/zo98IKG/PzZqqMeoRhQRkFKy4wbIQ+3V5EsW5YL8qdL1pfxKoRMIlIjCHQ== ----------

--------- [ Encrypt success ] 加密数据成功 ----------

--------- [ Decrypt ] 加密算法:AES/OFB/ISO10126Padding ----------

--------- [ Decrypt ] 算法:AES, 加密模式:OFB,补码: ISO10126Padding ----------

--------- [ Decrypt ] 秘钥:0746E45280884C87,向量 偏移量:2EBF60DEE1F14462 ----------

--------- [ Decrypt ] 解密前数据:OpgpMES7fA6fIANe8EGEXirfEty/zo98IKG/PzZqqMeoRhQRkFKy4wbIQ+3V5EsW5YL8qdL1pfxKoRMIlIjCHQ== ----------

--------- [ Decrypt ] 解密后数据:这是一个没有固定长度的测试的字符串 ----------

--------- [ Decrypt success ] 解密数据成功 ----------

原字符串: 这是一个没有固定长度的测试的字符串

加密后字符串: OpgpMES7fA6fIANe8EGEXirfEty/zo98IKG/PzZqqMeoRhQRkFKy4wbIQ+3V5EsW5YL8qdL1pfxKoRMIlIjCHQ==

解密后字符串: 这是一个没有固定长度的测试的字符串

Java中的RSA加解密工具类:RSAUtils

本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.utils.log.LogUtils; ...

Java中的AES加解密

直接上代码,Base64使用的是Java8的方法,如没有,替换即可 KEY:即密码 IV:即偏移量,可自订,十六位 加密方式:AES/CBC/PKCS5Padding,128位加密 如果想用256位和 ...

C&num;与java中的AES加解密互解算法

一.C#版AES加解密算法 public class AESCode { public string Key { get; set; } public string Encrypt(string va ...

RSA加解密工具类RSAUtils&period;java,实现公钥加密私钥解密和私钥解密公钥解密

package com.geostar.gfstack.cas.util; import org.apache.commons.codec.binary.Base64; import javax.cr ...

AES加密解密工具类封装&lpar;AESUtil&rpar;

package club.codeapes.common.utils; import org.springframework.util.Base64Utils; import javax.crypto ...

java中redis的分布式锁工具类

使用方式 try { if(PublicLock.getLock(lockKey)){ //这里写代码逻辑,执行完后需要释放锁 PublicLock.freeLock(lockKey); } } ca ...

DES加解密工具类

这两天在跟友商对接接口,在对外暴露接口的时候,因为友商不需要登录即可访问对于系统来说存在安全隐患,所以需要友商在调用接口的时候需要将数据加密,系统解密验证后才执行业务.所有的加密方式并不是万能的,只是 ...

java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。

//------------------------------------------------我是代码的分割线 // 首选是一个工具类,在该工具类里面,定义了一个方法,public void s ...

Java中的4个并发工具类 CountDownLatch CyclicBarrier Semaphore Exchanger

在 java.util.concurrent 包中提供了 4 个有用的并发工具类 CountDownLatch 允许一个或多个线程等待其他线程完成操作,课题点 Thread 类的 join() 方法 ...

随机推荐

趣拍SDK接入问题Android

Android接入趣拍问题. 大部分android开发者第一次下载SDK后,特别是导入到eclipse后,可以运行工程,但点击app中的record没反映,每次点击record按钮 会出现如下log. ...

Java---类反射&lpar;2&rpar;---类反射加强

经过前面的一篇博客,Java-类反射(1),相信大家对类反射有了一定的了解了. 下面来进行对类反射的加强,了解一下怎么通过类反射去new一个对象, 怎么通过类反射去访问其他类的方法. 怎么通过类反射去 ...

严重:IOException while loading persisted sessions&colon;java&period;io&period;EOFException&period;

1.错误叙述性说明 严重:IOException while loading persisted sessions:java.io.EOFException. java.io.EOFException ...

&lbrack;cocos2d-x&rsqb; --- CCNode类详解

Email : awodefeng@163.com 1 CCNode是cocos2d-x中一个很重要的类,CCNode是场景.层.菜单.精灵等的父类.而我们在使用cocos2d-x时,接触最多的就是场 ...

C&num;编程基础-&gt&semi;XML系列导航

缘由 最近开发的小程序过程中需要涉及到XML相关操作,突然发现自己对于这知识点了解的太少,急需学习加强.刚好项目的时间也不是很紧急,自己就总结XML相关知识点.一个方面自己学习,一个方面也希望可以帮到 ...

异步任务spring &commat;Async注解源码解析

1.引子 开启异步任务使用方法: 1).方法上加@Async注解 2).启动类或者配置类上@EnableAsync 2.源码解析 虽然spring5已经出来了,但是我们还是使用的spring4,本文就 ...

Sublime text 替换成对标签 首尾匹配的HTML 标签

按Cmd-Shift-K (Win: Ctrl-Shift-') 就能选中这组标签

Luogu P3177 &lbrack;HAOI2015&rsqb;树上染色

一道有机结合了计数和贪心这一DP两大考点的神仙题,不得不说做法是很玄妙. 首先我们很容易想到DP,设\(f_{i,j}\)表示在以\(i\)为根节点的子树中选\(j\)个黑色节点的最大收益值. 然后我 ...

Nutch源码阅读进程4

前面依次看了nutch的准备工作inject和generate部分,抓取的fetch部分的代码,趁热打铁,我们下面来一睹parse即页面解析部分的代码,这块代码主要是集中在ParseSegment类里 ...

Codeforces633G&lpar;SummerTrainingDay06-I dfs序&plus;线段树&plus;bitset&rpar;

G. Yash And Trees time limit per test:4 seconds memory limit per test:512 megabytes input:standard i ...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 Java 使用 AES 解密工具类,其包括了 AES/CBC/PKCS5Padding 算法的解密方法: ```java import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.util.Base64; public class AESUtil { private static final String ALGORITHM_AES = "AES"; private static final String CIPHER_AES_CBC_PKCS5PADDING = "AES/CBC/PKCS5Padding"; private static final String IV = "0123456789abcdef"; // 16 位 /** * AES 密 * * @param data 需要密的数据 * @param key 密钥字符串(16、24 或 32 位) * @return 密后的字符串 */ public static String encryptByAES(String data, String key) { try { byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8); SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, ALGORITHM_AES); Cipher cipher = Cipher.getInstance(CIPHER_AES_CBC_PKCS5PADDING); IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes(StandardCharsets.UTF_8)); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec); byte[] encryptedBytes = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8)); return Base64.getEncoder().encodeToString(encryptedBytes); } catch (Exception e) { e.printStackTrace(); } return null; } /** * AES 解密 * * @param data 需要解密的数据 * @param key 密钥字符串(16、24 或 32 位) * @return 解密后的字符串 */ public static String decryptByAES(String data, String key) { try { byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8); SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, ALGORITHM_AES); Cipher cipher = Cipher.getInstance(CIPHER_AES_CBC_PKCS5PADDING); IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes(StandardCharsets.UTF_8)); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec); byte[] encryptedBytes = Base64.getDecoder().decode(data); byte[] decryptedBytes = cipher.doFinal(encryptedBytes); return new String(decryptedBytes, StandardCharsets.UTF_8); } catch (Exception e) { e.printStackTrace(); } return null; } } ``` 使用示例: ```java public static void main(String[] args) { String data = "Hello, world!"; String key = "1234567890123456"; String encryptedData = AESUtil.encryptByAES(data, key); System.out.println("密后的数据:" + encryptedData); String decryptedData = AESUtil.decryptByAES(encryptedData, key); System.out.println("解密后的数据:" + decryptedData); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值