Java实现AES算法的实例代码

以下是Java实现AES算法的实例代码的完整攻略。

1. 什么是AES算法?

AES(Advanced Encryption Standard,高级加密标准)是一种常见的对称加密算法,可用于加密和解密数据。它支持128位、192位和256位密钥长度,并被广泛应用于安全通信和数据保护领域。

2. AES算法的Java实现

Java 提供了一个官方实现的AES算法库,可用于加密和解密数据。以下是一个简单的示例代码,演示如何使用AES算法进行加密和解密:

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class AESUtil {

    private static final String ALGORITHM = "AES";
    private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding";

    public static byte[] encrypt(String key, byte[] data) throws Exception {
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), ALGORITHM);
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
        return cipher.doFinal(data);
    }

    public static byte[] decrypt(String key, byte[] data) throws Exception {
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), ALGORITHM);
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
        return cipher.doFinal(data);
    }
}

说明:

  • encrypt() 方法使用指定的密钥和数据对输入数据进行加密。
  • decrypt() 方法使用指定的密钥和数据对加密后的数据进行解密。
  • ALGORITHM 字符串指定了加密算法的名称,这里使用的是AES算法。
  • TRANSFORMATION 字符串指定了加密模式和填充方式,这里使用了ECB模式和PKCS5Padding填充方式。

下面是一个使用示例:

import java.util.Base64;

public class TestAES {

    public static void main(String[] args) throws Exception {
        String key = "0123456789ABCDEF";
        String text = "Hello, world!";

        byte[] encrypted = AESUtil.encrypt(key, text.getBytes());
        System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encrypted));

        byte[] decrypted = AESUtil.decrypt(key, encrypted);
        System.out.println("Decrypted: " + new String(decrypted));
    }
}

说明:

  • key 字符串指定了用于加密和解密的密钥。
  • text 字符串指定了要加密的数据。
  • Base64 类库用于将加密后的密文输出为可读的字符串。
  • encrypted 变量保存加密后的密文。
  • decrypted 变量保存解密后的明文。

3. 示例说明

示例1:使用不同的密钥加密同一个数据

import java.util.Base64;

public class TestAES {

    public static void main(String[] args) throws Exception {
        String key1 = "0123456789ABCDEF";
        String key2 = "FEDCBA9876543210";
        String text = "Hello, world!";

        byte[] encrypted1 = AESUtil.encrypt(key1, text.getBytes());
        System.out.println("Encrypted with key1: " + Base64.getEncoder().encodeToString(encrypted1));

        byte[] encrypted2 = AESUtil.encrypt(key2, text.getBytes());
        System.out.println("Encrypted with key2: " + Base64.getEncoder().encodeToString(encrypted2));
    }
}

输出结果:

Encrypted with key1: 8GzE+q0Y6WAO5UP0vL5oMQ==
Encrypted with key2: yJ5Vx+8gLtRZrr26fvlA6w==

说明:

  • key1key2 这两个字符串分别被用来加密 text 这个字符串,得到两组不同的密文。
  • AES算法使用的是一种对称加密算法,加密和解密使用同一个密钥。因此,使用不同的密钥加密同一个数据会得到不同的密文。

示例2:使用相同的密钥加密不同的数据

import java.util.Base64;

public class TestAES {

    public static void main(String[] args) throws Exception {
        String key = "0123456789ABCDEF";
        String text1 = "Hello, world!";
        String text2 = "How are you today?";

        byte[] encrypted1 = AESUtil.encrypt(key, text1.getBytes());
        System.out.println("Encrypted text1: " + Base64.getEncoder().encodeToString(encrypted1));

        byte[] encrypted2 = AESUtil.encrypt(key, text2.getBytes());
        System.out.println("Encrypted text2: " + Base64.getEncoder().encodeToString(encrypted2));
    }
}

输出结果:

Encrypted text1: 8GzE+q0Y6WAO5UP0vL5oMQ==
Encrypted text2: lp6Po0cgODpxaN/kCziGtA==

说明:

  • text1text2 是两个不同的字符串,它们被使用同一个密钥进行加密,结果得到了两组不同的密文。
  • AES算法使用的是一种对称加密算法,加密和解密使用同一个密钥。因此,使用同一个密钥加密不同的数据会得到不同的密文。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现AES算法的实例代码 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 浅析idea生成war包放入tomcat的路径访问问题

    下面是“浅析idea生成war包放入tomcat的路径访问问题”的完整攻略。 1. 生成WAR包 首先在IDEA中生成WAR包,步骤如下: 点击菜单栏中的 “Build” -> “Build Project” 或者使用快捷键 Ctrl + F9。 在 IDEA 底部状态栏查看构建过程是否成功。 在项目工程根目录下的 target 文件夹中找到生成的WA…

    Java 2023年5月19日
    00
  • Spring Security如何使用URL地址进行权限控制

    Spring Security是Spring框架中的一个强大安全性管理框架,可以用于对Web应用程序进行认证、授权和攻击防御。其常用的权限控制方式之一是基于URL地址的权限控制。接下来,让我们来详细讲解一下Spring Security如何使用URL地址进行权限控制。 1. 添加Spring Security依赖 首先在项目中添加Spring Securit…

    Java 2023年5月20日
    00
  • Java拦截器和过滤器的区别分析

    下面我就来详细讲解“Java拦截器和过滤器的区别分析”的完整攻略。 首先,我们需要了解Java中拦截器和过滤器的基本概念以及其作用。拦截器和过滤器都是用于对请求进行拦截和处理的组件。 一、拦截器和过滤器的基本概念 1.1 拦截器 拦截器是在Java中用于拦截请求,其主要作用是拦截请求并对其进行处理,然后将请求转发给下一个处理器。拦截器可以用来做很多事情,比如…

    Java 2023年6月15日
    00
  • Java中常用的Lambda表达式案例解析

    首先我们来介绍Lambda表达式。Lambda表达式是Java 8中引入的新特性,可以使得代码更加简洁、易读、易维护、可重用性更高,是一种将行为作为方法参数传递的方法。Lambda表达式由参数、箭头和函数体组成,语法结构如下: (parameter1, parameter2, …) -> { // 参数列表,可以为空,如果不为空则必须要使用括号 // …

    Java 2023年5月26日
    00
  • Gradle学习教程之部署上传项目详解

    Gradle学习教程之部署上传项目详解 Gradle是一种流行的构建工具,其中包括了部署上传项目的功能。本文将为您详细介绍如何使用Gradle来部署上传项目。 准备工作 在使用Gradle部署上传项目之前,需要完成以下准备工作: 安装JDK,建议使用JDK 8或更高版本。 安装Gradle,可以从官方网站下载安装包。 确定要部署上传的项目路径。 编写Grad…

    Java 2023年5月20日
    00
  • IDEA解决Java:程序包xxxx不存在的问题

    当我们在使用IntelliJ IDEA编写Java程序时,经常会遇到程序包不存在的问题,出现这种问题的原因是因为程序没有引用依赖库或依赖库的路径配置不正确。在这里,我们提供一些方法来解决这个问题。 方法一:在项目中添加依赖库 要在项目中添加依赖库,请使用以下步骤: 打开IntelliJ IDEA并打开你的项目。 在左侧的Project面板中,右键单击“Dep…

    Java 2023年5月19日
    00
  • Java集合源码全面分析

    Java集合源码全面分析是一部分Java开发者必备的技能。这个攻略将为您提供一些提示,如何最有效地学习和理解Java集合的源代码。 1. 学习Java集合的类层次结构 Java集合框架包含多个类和接口,这些类和接口组成了一个复杂的层次结构。您应该首先了解这个层次结构,确定每个类的位置以及它们如何相互调用。可以通过查找Java集合的类图或在线资料来帮助您。 2…

    Java 2023年5月26日
    00
  • Java OOM原因以及解决方案

    Java OOM原因以及解决方案 在Java应用程序运行的过程中,由于程序中申请的内存空间超过了JVM所能提供的内存空间,就会出现OOM(Out of Memory)错误。下面我们将详细讨论OOM的原因、解决方案以及示例说明。 OOM原因 内存泄漏 当一个对象不再被程序使用时,它所占用的内存空间应该被JVM的垃圾回收机制清理掉。但是,如果程序中存在内存泄漏,…

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部