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日

相关文章

  • Java中实现文件上传下载的三种解决方案(推荐)

    Java中实现文件上传下载的三种解决方案(推荐) 文件上传下载是web开发中常见的需求,Java作为流行的后端语言,有多种解决方案可以实现文件上传下载。本文将介绍三种推荐的方案,分别是: 1.基于Servlet API文件上传下载 2.使用Spring框架的文件上传下载 3.使用Apache Common FileUpload组件实现文件上传下载 第一种方案…

    Java 2023年5月20日
    00
  • java实现动态验证码

    这里是Java实现动态验证码的完整攻略。 什么是动态验证码 动态验证码是一种更加安全的验证码,在传统的验证码基础上增加了动态变化的效果,使得更难被机器人识别。 实现步骤 生成验证码 我们可以使用Java的第三方库生成验证码图片,代码如下所示: import cn.hutool.captcha.CaptchaUtil; import cn.hutool.cap…

    Java 2023年6月15日
    00
  • springboot中@RequestMapping的用法

    下面是关于“springboot中@RequestMapping的用法”的完整攻略。 @RequestMapping注解 @RequestMapping是Spring MVC中的注解,它可以将URL映射到一个特定的方法上。在Spring Boot应用中,我们可以使用它来定义REST API的终端点(Endpoint)。 常用属性 @RequestMappin…

    Java 2023年5月15日
    00
  • 在Spring Data JPA中引入Querydsl的实现方式

    下面是在Spring Data JPA中引入Querydsl的实现方式的攻略: 1. 引入依赖 首先,我们需要在项目中引入Querydsl相关的依赖,具体如下: <dependencies> <dependency> <groupId>com.querydsl</groupId> <artifactId&…

    Java 2023年5月20日
    00
  • jsp 文件下载示例代码

    下面是关于 JSP 文件下载示例代码的完整攻略: 一、准备工作 在编写 JSP 文件下载示例之前,我们需要准备以下工作: 创建一个 download.jsp 页面,用于处理文件下载请求并返回文件内容; 确定要下载的文件路径,并将该路径作为参数传递给 download.jsp 页面。 二、JSP 文件下载示例代码 以下是一个标准的 JSP 文件下载示例代码: …

    Java 2023年6月15日
    00
  • 一篇文章弄懂JVM类加载机制过程以及原理

    那么让我们来详细讲解一下“一篇文章弄懂JVM类加载机制过程以及原理”的完整攻略。 1. JVM类加载机制基础 在深入了解JVM类加载机制的过程之前,我们需要先了解一些相关的基础知识。 1.1 类、类加载器和类加载 在Java中,我们通常所说的类是指Java类,而Java类的定义是以.java文件为载体,通过编译器(如javac)将其转换为.class文件后生…

    Java 2023年5月26日
    00
  • Java面向对象三大特性及多态解析

    Java面向对象编程是Java语言的基础,它支持三大特性:继承、封装和多态。其中,多态是Java最核心的特性,常常用于实现高效的代码重用和面向接口的编程。本篇攻略将详细讲解Java面向对象三大特性及多态解析。 一、继承 1.继承的定义 继承(Inheritance)是指一个类(称为子类、派生类)继承另外一个类(称为父类、基类)所有非私有的方法和属性。通过继承…

    Java 2023年5月26日
    00
  • Java将日期类型Date时间戳转换为MongoDB的时间类型数据

    下面是将Java中的日期类型Date时间戳转换为MongoDB的时间类型数据的完整攻略: 1. 使用Java的Date类型获取时间戳 首先,需要使用Java的Date类型获取当前的时间戳。可以使用System类中的currentTimeMillis()方法来获取当前的时间戳。示例代码如下: long timestamp = System.currentTim…

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