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日

相关文章

  • windows下使用 intellij idea 编译 kafka 源码环境

    下面是使用 IntelliJ IDEA 编译 Kafka 源码的完整攻略: 1. 前置条件 安装 JDK 1.8 或以上版本 安装 Git 和 Maven 工具 下载 Kafka 源码 2. 导入源码 使用 IntelliJ IDEA 导入 Kafka 源码,可以通过如下步骤操作:- 打开 IntelliJ IDEA,点击 File -> New -&…

    Java 2023年5月20日
    00
  • SpringBoot整合Shiro的代码详解

    接下来我会详细讲解“SpringBoot整合Shiro的代码详解”的完整攻略。整个过程分为以下几个步骤: 添加依赖 配置Shiro 编写身份认证和授权逻辑 添加Web接口 测试 下面我会一一解释每个步骤的具体内容。 1. 添加依赖 首先需要在pom.xml文件中添加Shiro和SpringBoot的依赖: <dependency> <gro…

    Java 2023年6月15日
    00
  • tomcat 6.0.20在一个机器上安装多个服务的方法

    下面是详细的过程: 1. 下载安装Tomcat 首先需要在机器上下载Tomcat并进行安装。可以从官网下载Tomcat的安装文件(http://tomcat.apache.org/),根据机器操作系统的不同选择32位/64位版本。下载完成后,双击运行安装程序,并按照提示进行安装。 2. 配置Tomcat服务 安装完成后,需要为Tomcat服务进行配置。配置文…

    Java 2023年5月19日
    00
  • java中如何使用HttpClient调用接口

    下面是关于如何在Java中使用HttpClient调用接口的完整攻略。 简介 HttpClient是一个开源的Java HTTP客户端库,它适用于处理HTTP请求和响应,并支持多种协议,如HTTP、HTTPS、FTP、UDP等。使用HttpClient可以方便、可靠地进行网络通信,是Java程序员进行HTTP请求的绝佳工具。 添加依赖 为了使用HttpCli…

    Java 2023年5月26日
    00
  • Spring MVC全局异常处理和单元测试_动力节点Java学院整理

    Spring MVC是一种流行的Java Web框架,其拥有全局异常处理机制,可以在程序抛出异常后,统一处理并返回指定的错误信息。本篇攻略主要包含两部分内容,分别是Spring MVC全局异常处理和单元测试。 一、Spring MVC全局异常处理 1.1 在Spring配置文件中配置异常处理拦截器 在Spring的配置文件中,可以配置一个全局的异常处理拦截器…

    Java 2023年6月15日
    00
  • 深入分析Java异常

    深入分析Java异常攻略 了解Java异常 Java中的异常是指程序在执行过程中出现了错误,导致程序无法继续执行或者执行结果不正确的情况。Java使用异常来处理这些错误,使程序能够更好地处理错误情况并提供更好的用户体验。Java中的异常分为两类:检查异常和非检查异常。 检查异常 检查异常是指在编译时就可以检测到的异常,程序在编译时必须显式地处理这些异常。常见…

    Java 2023年5月26日
    00
  • Java之String类型的编码方式转换

    下面是“Java之String类型的编码方式转换”的完整攻略。 前言 在日常编程中,我们常常需要对字符串的编码方式进行转换。例如:我们从网络获取到的数据一般是以UTF-8编码的字符串,但是在本地的操作系统中,一些字符可能使用的是GBK编码。这个时候,我们就需要进行编码方式的转换,以保证数据的正确性。在Java中,我们可以使用String类的getBytes(…

    Java 2023年5月20日
    00
  • 什么是类加载的生命周期?

    以下是关于类加载的生命周期的详细讲解: 什么是类加载的生命周期? 类加载的生命周期是指从类被加载到内存中开始,到类被卸载出内存为的整个过程。类加载的生命周期包括以下几个阶段: 加载(Loading):将类的字节码加载到内存。 链接(Linking):将类的二进制数据合并到 Java 运行时环境中。 验证(Verification):验证的字节码是否符合 Ja…

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