Java AES256加密解密示例代码

下面是Java AES256加密解密示例代码的完整攻略:

Java AES256加密解密示例代码

什么是AES256加密?

AES256是一种对称加密算法,也就是说加密和解密都使用相同的密钥。AES256使用256位密钥长度,目前被认为是一种非常安全的加密算法。在Java中,可以使用javax.crypto包中的类来实现AES256加密。

AES256加密解密示例

1. 加密

下面是一个将字符串使用AES256加密的示例:

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class AesUtil {

    public static String encrypt(String data, String key) throws Exception {

        byte[] rawData = data.getBytes("UTF-8");

        byte[] keyData = key.getBytes("UTF-8");
        SecretKey secretKey = new SecretKeySpec(keyData, "AES");

        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedData = cipher.doFinal(rawData);

        return Base64.getEncoder().encodeToString(encryptedData);
    }
}

这个示例中,encrypt()方法需要两个参数,第一个是需要加密的字符串,第二个是密钥。使用getBytes()方法将字符串和密钥转换成字节数组,并且使用SecretKeySpec类来生成一个SecretKey对象。然后使用Cipher类的实例来实现加密。在这个示例中,我们使用AES/ECB/PKCS5Padding作为加密模式和填充模式。最后,将加密后的字节数组使用Base64进行编码,并返回字符串类型的加密结果。

2. 解密

下面是一个将AES256加密后的字符串解密的示例:

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class AesUtil {

    public static String decrypt(String data, String key) throws Exception {

        byte[] encryptedData = Base64.getDecoder().decode(data);
        byte[] keyData = key.getBytes("UTF-8");
        SecretKey secretKey = new SecretKeySpec(keyData, "AES");

        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedData = cipher.doFinal(encryptedData);

        return new String(decryptedData, "UTF-8");
    }
}

这个示例的解密方法decrypt()需要两个参数,第一个是需要解密的字符串,第二个是密钥。首先,使用Base64解码出加密后的原始字节数组。然后使用SecretKeySpec类来生成SecretKey对象,使用Cipher类的实例来实现解密。在这个示例中,我们使用AES/ECB/PKCS5Padding作为解密模式和填充模式。最后,将解密后的字节数组转换成字符串类型,返回解密结果。

3. 示例

下面是一个演示如何使用AES256加密解密的示例:

public class Main {
    public static void main(String[] args) throws Exception {
        String data = "hello, world";
        String key = "1234567890abcdef1234567890abcdef";

        String encrypted = AesUtil.encrypt(data, key);
        System.out.println("Encrypted data: " + encrypted);

        String decrypted = AesUtil.decrypt(encrypted, key);
        System.out.println("Decrypted data: " + decrypted);
    }
}

在这个示例中,我们使用了128位的密钥(32个字节),对字符串"hello, world"进行加密和解密操作。运行这个示例,输出的结果应该如下:

Encrypted data: r5gi6f2R/UJjlkYKl8f2Jw==
Decrypted data: hello, world

4. 总结

在本文中,我们介绍了如何使用Java实现AES256加密解密,包括加密和解密的示例代码。需要注意,在使用AES256加密解密时,需要保证密钥的长度是256位,并且使用合适的加密模式和填充模式。如果密钥长度不足256位,会导致加密结果不安全。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java AES256加密解密示例代码 - Python技术站

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

相关文章

  • Android应用开发之将SQLite和APK一起打包的方法

    Android应用开发中采用SQLite存储数据是非常常见的做法,而将SQLite数据库文件和APK文件打包在一起发布则可以方便用户下载和安装。下面将详细介绍将SQLite和APK打包在一起的方法。 准备工作 首先,需要将SQLite数据库文件放在app/src/main/assets文件夹下。如果该文件夹不存在,则手动创建该文件夹。 在代码中访问SQLit…

    Java 2023年5月20日
    00
  • Spring和activiti进行整合过程解析

    下面我将详细讲解“Spring和activiti进行整合过程解析”的完整攻略。 一、前言 Spring是一个非常流行的Java框架,而activiti则是一个优秀的BPMN流程引擎。将这两者结合在一起,能够帮助我们更好地完成业务流程的处理。下面我将详细介绍Spring和activiti的整合过程。 二、整合步骤 引入依赖 首先需要在项目中引入Spring和a…

    Java 2023年5月19日
    00
  • IntelliJ IDEA怎么创建并运行java程序?

    那我来给您详细讲解 IntelliJ IDEA 怎么创建并运行 Java 程序的完整攻略。 一、创建 Java 项目 打开 IntelliJ IDEA,点击 Create New Project; 在弹出窗口中选择 Java 选项,然后选择 SDK 版本和项目类型,并在 Project Name 中输入您想要的项目名称; 点击 Next,继续进行配置,直到完…

    Java 2023年5月19日
    00
  • Java判断两个日期相差天数的方法

    下面我来详细讲解“Java判断两个日期相差天数的方法”的完整攻略。 1. 获取两个日期对象 首先需要获取两个日期对象,可以使用Java中的日期类——java.util.Date或java.time.LocalDate。这里提供两种方式: 1.1 使用java.util.Date Date date1 = new SimpleDateFormat("…

    Java 2023年5月20日
    00
  • 搭建java WEB开发环境和应用

    搭建Java Web开发环境和应用攻略 环境 搭建Java Web开发环境需要的软件包括: JDK(Java Development Kit) IDE(Integrated Development Environment) Tomcat(Web服务器) MySQL(关系型数据库) JDK JDK是Java开发SDK,是Java程序员开发Java程序的必备软件…

    Java 2023年5月19日
    00
  • 关于@Query注解的用法(Spring Data JPA)

    一、@Query注解的介绍 在Spring Data JPA中,@Query注解可以用来定义自定义查询。它可以定义任何符合JPA中JPQL语法规范的查询语句,并且可以支持任何返回类型,例如实体对象、DTO等。 @Query注解可以有两种使用方式: 直接在Repository接口中,定义方法时使用@Query注解,如: public interface Use…

    Java 2023年6月3日
    00
  • JavaWeb实现上传文件功能

    下面是JavaWeb实现上传文件功能的完整攻略: 1. 准备工作 在开始实现上传文件功能之前,我们需要完成以下几项准备工作: 一个能够处理HTTP请求的JavaWeb开发环境; 了解HTTP协议中文件上传的流程和限制; 选择并配置一个适当的文件上传组件或开发框架。 在这里,我们建议使用Apache的文件上传组件commons-fileupload,因为它易于…

    Java 2023年5月20日
    00
  • Java throw Exception实现异常转换

    Java中的异常处理机制是一项重要的特性。在编写Java程序时,如果由于某些原因导致程序无法正常执行,就会抛出异常。异常分为已检查异常(checked exception)和未检查异常(unchecked exception)。已检查异常在编译期便会被检查出来,程序必须给出异常处理代码;未检查异常则不需要必须捕获和处理,但是可以选择性的进行。 有时候,我们需…

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