Java 对称加密几种算法分别实现

下面是关于Java对称加密几种算法分别实现的攻略:

一、对称加密算法简介

对称加密算法是指加密和解密使用同一密钥的加密算法,也叫私钥加密算法。对称加密算法又分为块加密算法和流加密算法两种,块加密算法是按照固定长度的数据块进行加密,而流加密算法是按照流式数据进行加密。

二、对称加密算法的实现

Java中对称加密算法的实现主要包括以下几种:

1. DES加密算法

DES算法是最早的商业加密标准,采用的是对称加密模式,密钥长64位,分为8个字节,但是实际上是56位密钥和8位校验位。DES算法已经不再安全,一般用于加密较短的数据。
具体实现代码如下:

public static String encryptDES(String source, String key) throws Exception {
    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
    byte[] keyBytes = key.getBytes();
    byte[] keyData = new byte[8];
    System.arraycopy(keyBytes, 0, keyData, 0, Math.min(keyBytes.length, keyData.length));

    SecretKeySpec keySpec = new SecretKeySpec(keyData, "DES");
    IvParameterSpec ivSpec = new IvParameterSpec(keyData);
    cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);

    byte[] encrypted = cipher.doFinal(source.getBytes());
    return Base64.getEncoder().encodeToString(encrypted);
}

2. 3DES加密算法

3DES算法是DES算法的加强版,它使用3个不同的56位密钥,即168位密钥,主要是为了增加安全性,3DES算法虽然比DES算法更安全,但加密解密也更耗时。
具体实现代码如下:

public static String encrypt3DES(String source, String key) throws Exception {
    Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
    byte[] keyBytes = key.getBytes();
    byte[] keyData = new byte[24];
    System.arraycopy(keyBytes, 0, keyData, 0, Math.min(keyBytes.length, keyData.length));

    SecretKeySpec keySpec = new SecretKeySpec(keyData, "DESede");
    IvParameterSpec ivSpec = new IvParameterSpec(keyData);
    cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);

    byte[] encrypted = cipher.doFinal(source.getBytes());
    return Base64.getEncoder().encodeToString(encrypted);
}

3. AES加密算法

AES算法是当前比较流行的加密算法之一,它的密钥长度可选128位、192位或256位,AES算法的加密解密速度非常快,而且密钥长度越长安全性越高。
具体实现代码如下:

public static String encryptAES(String source, String key) throws Exception {
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    byte[] keyBytes = key.getBytes();
    byte[] keyData = new byte[16];
    System.arraycopy(keyBytes, 0, keyData, 0, Math.min(keyBytes.length, keyData.length));

    SecretKeySpec keySpec = new SecretKeySpec(keyData, "AES");
    IvParameterSpec ivSpec = new IvParameterSpec(keyData);
    cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);

    byte[] encrypted = cipher.doFinal(source.getBytes());
    return Base64.getEncoder().encodeToString(encrypted);
}

三、代码示例

下面提供一个简单的示例,使用DES算法进行加密和解密,其中密钥为"12345678",要加密的明文为"Hello World!":

public static void main(String[] args) throws Exception {
    String key = "12345678";
    String source = "Hello World!";

    String encrypted = encryptDES(source, key);
    System.out.println("加密结果:" + encrypted);

    String decrypted = decryptDES(encrypted, key);
    System.out.println("解密结果:" + decrypted);
}

输出结果为:

加密结果:OEMbXMKrJYysWSD9yBcM4A==
解密结果:Hello World!

再给一个示例,使用AES算法进行加密和解密,其中密钥为"1234567890123456",要加密的明文为"Hello World!":

public static void main(String[] args) throws Exception {
    String key = "1234567890123456";
    String source = "Hello World!";

    String encrypted = encryptAES(source, key);
    System.out.println("加密结果:" + encrypted);

    String decrypted = decryptAES(encrypted, key);
    System.out.println("解密结果:" + decrypted);
}

输出结果为:

加密结果:hcB248l9mfTtFcSl5lK5JQ==
解密结果:Hello World!

以上就是Java对称加密几种算法的实现方式以及代码示例,希望能帮到你。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 对称加密几种算法分别实现 - Python技术站

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

相关文章

  • Java利用Dijkstra算法求解拓扑关系最短路径

    以下是“Java利用Dijkstra算法求解拓扑关系最短路径”的完整攻略。 1. 理解Dijkstra算法 Dijkstra算法是一种单源最短路径算法,用于计算一个节点到图中所有其他节点的最短路径。算法最早由荷兰计算机科学家狄克斯特拉于1959年提出,因此得名。该算法常用于路由算法或作为其他图算法的一个子模块。 Dijkstra算法的基本思想是从起点开始,对…

    Java 2023年5月19日
    00
  • Java编程中ArrayList源码分析

    Java中的ArrayList是一种基于动态数组实现的数据结构,非常常用。相对于传统的数组,ArrayList具有更为灵活的可扩展性和易操作性。那么,在Java编程中,如何理解ArrayList的源码结构呢?接下来我将进行一些简单的分析说明。 ArrayList源码结构 概述 ArrayList类定义了Java中的动态数组,在下面的代码中可以看到其“add”…

    Java 2023年5月26日
    00
  • Java的Hibernate框架数据库操作中锁的使用和查询类型

    对于Java的Hibernate框架数据库操作中锁的使用和查询类型,我们需要掌握如下几个方面: 为什么使用锁? 在并发访问的情况下,多个客户端会同时对同一个数据库进行操作,如果不加锁就有可能会发生多用户同时修改同一条记录而导致数据不一致的问题,而加锁就可以使得同一时刻只有一个用户对同一个记录进行操作,避免了并发修改引起的不一致性问题。 如何使用锁? 在Hib…

    Java 2023年5月19日
    00
  • 基于Mybatis plus 自动代码生成器的实现代码

    下面就为您详细讲解“基于Mybatis plus 自动代码生成器的实现代码”的完整攻略。首先我们来了解一下Mybatis plus自动代码生成器。 Mybatis plus是Mybatis的增强版,提供了很多实用的功能,其中就包括代码生成器。Mybatis plus代码生成器可以根据数据库表生成对应的JavaBean、Mapper、Service等代码,大大…

    Java 2023年5月20日
    00
  • 动态创建script标签实现跨域资源访问的方法介绍

    动态创建script标签实现跨域资源访问是一种常见的前端技巧,可以用于向其他域名的服务器请求数据。以下是实现该方法的具体步骤: 1. 创建一个 script 标签 在 HTML 中动态添加一个 script 标签,并设置其中的 src 属性为需要访问的资源的 URL。例如: <script src="http://example.com/da…

    Java 2023年6月15日
    00
  • Java 定时器(Timer,TimerTask)详解及实例代码

    Java 定时器(Timer,TimerTask)详解及实例代码 什么是定时器 在 Java 中,我们可以使用定时器(Timer)来实现一些定时任务,比如定时执行某个任务或者在一定时间后自动执行某个操作。 在 Java 中,我们可以通过 Timer 类来创建一个定时器对象,然后通过 TimerTask 类来创建一个定时任务对象,最后调用定时器对象的 sche…

    Java 2023年5月20日
    00
  • 一天吃透SpringMVC面试八股文

    说说你对 SpringMVC 的理解 SpringMVC是一种基于 Java 的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于Spring框架的一个模块。 它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful编程风格的请求。 什么是MVC模式? MVC的全名是Model View Control…

    Java 2023年4月22日
    00
  • MyBatis实现动态查询、模糊查询功能

    下面是MyBatis实现动态查询、模糊查询功能的完整攻略。 动态查询 动态查询就是查询条件随着用户的选择而动态生成的查询语句。MyBatis提供了三种方式来实现动态查询: If If标签用于判断某个条件成立时才会执行包含在其中的查询语句,示例代码如下: <select id="dynamicIfTest" parameterType…

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