当前位置:首页 > Java资讯 > 正文内容

《Java AES加密实战:从入门到精通》

admin2天前Java资讯2

《Java AES加密实战:从入门到精通》

一、AES加密简介

AES(Advanced Encryption Standard)即高级加密标准,是一种广泛使用的对称加密算法。它由比利时密码学家Vincent Rijmen和Joan Daemen共同设计,并于2001年被美国国家标准与技术研究院(NIST)采纳为官方加密标准。AES加密算法具有以下特点:

1. 对称加密:加密和解密使用相同的密钥;

2. 高度安全:经过多年研究,AES加密算法的安全性得到广泛认可;

3. 速度快:相比其他加密算法,AES加密和解密速度更快;

4. 支持多种模式:AES支持多种加密模式,如ECB、CBC、CFB、OFB等。

二、Java AES加密实现

在Java中,我们可以使用Java Cryptography Extension(JCE)来实现AES加密。以下将详细介绍如何在Java中使用AES加密算法。

1. 生成AES密钥

在Java中,我们可以使用KeyGenerator类来生成AES密钥。以下代码演示了如何生成AES密钥:

```java

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

public class AesKeyGenerator {

public static void main(String[] args) throws Exception {

KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");

keyGenerator.init(128); // 初始化密钥长度为128位

SecretKey secretKey = keyGenerator.generateKey(); // 生成AES密钥

byte[] keyBytes = secretKey.getEncoded(); // 获取密钥的字节数组

System.out.println("AES密钥(16进制):" + bytesToHex(keyBytes));

}

// 将字节数组转换为16进制字符串

private static String bytesToHex(byte[] bytes) {

StringBuilder sb = new StringBuilder();

for (byte b : bytes) {

sb.append(String.format("%02x", b));

}

return sb.toString();

}

}

```

2. AES加密和解密

生成密钥后,我们可以使用Cipher类来实现AES加密和解密。以下代码演示了如何使用AES加密和解密:

```java

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

import java.util.Base64;

public class AesEncryption {

public static void main(String[] args) throws Exception {

// 生成AES密钥

KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");

keyGenerator.init(128); // 初始化密钥长度为128位

SecretKey secretKey = keyGenerator.generateKey(); // 生成AES密钥

byte[] keyBytes = secretKey.getEncoded(); // 获取密钥的字节数组

// 加密

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); // 选择AES加密算法和填充方式

cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyBytes, "AES")); // 初始化加密器

byte[] cipherText = cipher.doFinal("Hello AES!".getBytes()); // 加密

System.out.println("加密结果(Base64):" + Base64.getEncoder().encodeToString(cipherText));

// 解密

cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, "AES")); // 初始化解密器

byte[] plainText = cipher.doFinal(cipherText); // 解密

System.out.println("解密结果:" + new String(plainText));

}

}

```

3. AES加密模式

AES支持多种加密模式,如ECB、CBC、CFB、OFB等。以下代码演示了如何使用AES的CBC加密模式:

```java

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

import java.util.Base64;

public class AesCbcEncryption {

public static void main(String[] args) throws Exception {

// 生成AES密钥和初始化向量

KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");

keyGenerator.init(128); // 初始化密钥长度为128位

SecretKey secretKey = keyGenerator.generateKey(); // 生成AES密钥

byte[] keyBytes = secretKey.getEncoded(); // 获取密钥的字节数组

byte[] ivBytes = new byte[16]; // 初始化向量长度为16字节

new SecureRandom().nextBytes(ivBytes); // 随机生成初始化向量

// 加密

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // 选择AES加密算法和填充方式

cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyBytes, "AES"), new IvParameterSpec(ivBytes)); // 初始化加密器

byte[] cipherText = cipher.doFinal("Hello AES!".getBytes()); // 加密

System.out.println("加密结果(Base64):" + Base64.getEncoder().encodeToString(cipherText));

// 解密

cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, "AES"), new IvParameterSpec(ivBytes)); // 初始化解密器

byte[] plainText = cipher.doFinal(cipherText); // 解密

System.out.println("解密结果:" + new String(plainText));

}

}

```

三、总结

本文介绍了Java AES加密算法的使用方法,包括生成AES密钥、AES加密和解密、AES加密模式等。在实际开发中,我们可以根据需求选择合适的加密模式和填充方式,确保数据的安全性。通过本文的学习,相信大家对Java AES加密有了更深入的了解。

相关文章

Maven仓库:深度解析其原理与优化策略

Maven仓库:深度解析其原理与优化策略

在Java开发领域,Maven作为一种强大的构建管理工具,已经深入人心。而Maven仓库作为Maven的核心组成部分,承载着项目依赖管理和构建资源的作用。本文将深入解析Maven仓库的原理,并分享一...

Java Lambda表达式:揭秘现代编程的利器

Java Lambda表达式:揭秘现代编程的利器

在Java编程语言中,Lambda表达式自Java 8开始被引入,它为Java带来了函数式编程的概念。Lambda表达式使得代码更加简洁、易读,并且提高了代码的执行效率。本文将深入探讨Java La...

K8s调度:揭秘容器编排的幕后英雄

K8s调度:揭秘容器编排的幕后英雄

在当今的云计算时代,容器技术已经成为企业级应用部署的重要选择。而Kubernetes(简称K8s)作为容器编排领域的佼佼者,凭借其强大的调度功能,赢得了众多开发者和企业的青睐。本文将深入剖析K8s调...

Java循环:从入门到精通,揭秘高效编程的秘密武器

Java循环:从入门到精通,揭秘高效编程的秘密武器

一、Java循环概述 在Java编程中,循环是一种非常实用的结构,它允许程序员重复执行一段代码,直到满足某个条件为止。Java提供了三种循环结构:for循环、while循环和do-while循环。本...

Cilium:揭秘下一代网络功能虚拟化技术,Java应用加速新篇章

Cilium:揭秘下一代网络功能虚拟化技术,Java应用加速新篇章

在云计算和微服务架构盛行的今天,网络功能虚拟化(NFV)技术成为了推动企业数字化转型的重要力量。而Cilium作为新一代网络功能虚拟化技术,凭借其高性能、可扩展性和安全性,正逐渐成为Java应用加速...

拥抱微服务新时代:Service Mesh的崛起与挑战

拥抱微服务新时代:Service Mesh的崛起与挑战

随着互联网技术的飞速发展,微服务架构逐渐成为企业构建分布式系统的首选。然而,微服务架构也带来了诸多挑战,如服务治理、服务发现、负载均衡、熔断降级等。为了解决这些问题,Service Mesh应运而生...