package com.util.aes;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.Base64Utils;
/**
* 使用AES对字符串进行加密
* @author dell
*
*/
public class Aes {
static Logger logAes = LoggerFactory.getLogger(Aes.class);
/**
* 加密
*
* @paramcontent需要加密的内容
* @parampassword加密密码
* @return
*/
public static byte[] encrypt(String content, String password) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(byteContent);
return result;// 加密
} catch (NoSuchAlgorithmException e) {
logAes.error("NoSuchAlgorithmException="+e.getMessage());
} catch (NoSuchPaddingException e) {
logAes.error("NoSuchPaddingException="+e.getMessage());
} catch (InvalidKeyException e) {
logAes.error("InvalidKeyException", e);
} catch (UnsupportedEncodingException e) {
logAes.error("加密异常", e);
} catch (IllegalBlockSizeException e) {
logAes.error("加密异常", e);
} catch (BadPaddingException e) {
logAes.error("加密异常", e);
}
return null;
}
/**
* 解密
*
* @paramcontent待解密内容
* @parampassword解密密钥
* @return
*/
public static byte[] decrypt(byte[] content, String password) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(content);
return result;// 加密
} catch (NoSuchAlgorithmException e) {
logAes.error("解密异常", e);
} catch (NoSuchPaddingException e) {
logAes.error("解密异常", e);
} catch (InvalidKeyException e) {
logAes.error("解密异常", e);
} catch (IllegalBlockSizeException e) {
logAes.error("解密异常", e);
} catch (BadPaddingException e) {
logAes.error("解密异常", e);
}
return null;
}
/**
* 加密
*
* @paramcontent需要加密的内容
* @parampassword加密密码
* @return
*/
public static byte[] encrypt2(String content, String password) {
try {
SecretKeySpec key = new SecretKeySpec(password.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
byte[] byteContent = content.getBytes("utf-8");//编码格式
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(byteContent);
return result;// 加密
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
//待加密内容
String content = "bocetest123";
//秘钥
String password = "12345678";
// 加密
System.out.println("加密前:" + content);
byte[] encryptResult = encrypt(content, password);
String tt4 = Base64Utils.encodeToString(encryptResult);
System.out.println(new String(tt4));
// 解密
byte[] decryptResult = decrypt(encryptResult, password);
System.out.println("解密后:" + new String(decryptResult));
}
}
相关推荐
AES 算法加密解密过程实现 AES(Advanced Encryption Standard)是一种对称加密算法,用于保护数据的机密性和完整性。在信息安全工程课程中,学生需要通过编程实现 AES 算法的加密解密过程,以了解加密和解密的原理...
VB.NET实现AES加密解密代码,可直接使用
AESdemo这个压缩包文件很可能包含了一个示例程序,用于演示如何使用AES算法加密和解密任意长度的数据。这个程序可能会使用某种编程语言实现,比如Python的PyCryptodome库或者Java的Java Cryptography Extension(JCE...
"ES加密/解密算法"可能是描述错误,通常指的是AES算法在Elasticsearch(ES)中的应用,因为标签提到了"Elasticsearch",而且在安全领域,Elasticsearch也会用到加密技术来保护数据。 **AES加密算法详解** AES是...
uni-app aes的加密和解密
在给定的代码示例中,AES算法被用于加密和解密字符串数据。 首先,了解AES加密的基本步骤: 1. **密钥生成**:AES加密需要一个密钥作为输入。在Java中,可以使用`KeyGenerator`类来生成密钥。`KeyGenerator....
### C# 实现 AES 加密解密算法 #### 概述 在计算机科学与信息安全领域,数据加密技术是一项至关重要的技术。AES(Advanced Encryption Standard,高级加密标准)是一种广泛使用的对称加密算法,用于保护敏感数据的...
在本项目中,"用C语言实现的AES加密解密算法"是针对AES算法的一种C语言实现,这允许开发者在不依赖特定库的情况下,在C环境中进行数据的加密和解密操作。 首先,我们需要理解AES的工作原理。AES的核心是基于替换和...
总之,虽然Qt本身不内置AES加密,但结合第三方库和Qt的现有组件,我们可以方便地实现AES加密和解密,为应用程序提供必要的安全保护。在开发过程中,务必遵循最佳实践,确保数据的完整性和安全性。
"AES128加密解密原理及算法详解.pdf"是一份详细的文档,它深入浅出地介绍了AES-128的工作原理、加密解密流程以及如何实现。这份文档对于理解AES的内部机制和如何在实际项目中应用是非常宝贵的资源。 学习AES-128,...
AES256是一种高级加密标准(Advanced Encryption Standard),是目前广泛应用的数据加密算法,以其强大的安全性、效率和灵活性而闻名。该标准由NIST(美国国家标准...这些知识点对于理解并实现AES256加密解密至关重要。
AES的核心在于一系列的替换和置换操作,它通过将明文数据块转换为密文数据块来实现加密,然后在解密过程中执行相反的操作。AES采用固定大小的块进行操作,通常是128位,同时支持不同长度的密钥,包括128位、192位和...
AES(Advanced Encryption Standard)是目前广泛应用的一种对称加密算法,由NIST(美国国家标准与技术研究院)在2001年...通过深入研究提供的代码和文档,你可以更全面地掌握AES算法在实际应用中的工作原理和实现方法。
1. `KeyGenerator`: 用于生成密钥,我们可以通过指定AES算法来创建16位的秘钥。 2. `Cipher`: 进行加密和解密操作的核心类,需要指定工作模式和填充方式。 3. `SecretKeySpec`: 用于将字节数组转换为秘钥对象。 ...
总的来说,这个资源包提供了一套适用于单片机环境的AES加密解密方案,支持Keil C51和STM32平台,并且支持不同长度的密钥,适应了多样化的安全需求。对于那些需要在单片机上处理敏感数据或者构建安全通信链路的开发者...
2. **设置密钥和初始化向量**:AES算法需要一个密钥,通常为128、192或256位。CBC模式还需要一个初始化向量(IV),它必须是块大小的倍数,对于AES通常是128位。这两个值都是二进制数据,可以使用QString或...
这个动态库提供了AES加密和解密的功能,对于理解和应用AES技术具有重要意义。 AES的全称为高级加密标准,是由NIST(美国国家标准与技术研究院)在2001年正式采纳的,用于替代原先的DES(数据加密标准)。AES采用了...
使用Verilog实现AES算法,可以将加密和解密过程转化为可综合的逻辑电路,最终用于芯片设计。 1. **模块化设计**:在Verilog中,AES的每个步骤可以被设计为独立的模块,如SubBytes、ShiftRows、MixColumns等。这些...
在iOS和Android平台上实现AES加密解密是开发者经常遇到的任务,尤其对于需要跨平台传输和存储敏感信息的场景。本篇文章将详细探讨AES加密解密算法在iOS和Android平台上的实现原理以及具体步骤。 首先,AES算法基于...
下面将详细讲解Java采用AES算法进行加解密的逻辑。 密钥生成是通过KeyGenerator来生成的。通过获取一个KeyGenerator实例,然后调用其generateKey()方法即可生成一个SecretKey对象。密钥的生成可以指定固定的种子,...