分享Java常用几种加密算法(四种)

分享Java常用几种加密算法(四种)

前言

随着互联网的发展,网络安全问题越来越受到重视,数据的安全性也越来越得到关注,特别是对于一些交易、存储的敏感数据。在这样的背景下,加密算法逐渐被广泛应用于数据的加密、解密、防篡改等安全领域。Java作为一种流行的编程语言,提供了许多常用的加密算法,本文将介绍Java常用的四种加密算法。

对称加密算法

对称加密算法是指加密和解密使用同一密钥的加密算法。这种加密算法的缺点是密钥的传输问题,如果密钥被攻击者获取,整个加密过程就会被破解。因此,对于对称加密算法,保证密钥的安全至关重要。

1. DES 加密算法

代码示例:

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

public class DesEncryptor {
    private static final String DES_ALGORITHM = "DESede/ECB/PKCS5Padding";

    /**
    * 使用DES加密数据
    * @param plainText 待加密的明文
    * @param secretKey 密钥
    * @return 加密后的数据
    */
    public static String encrypt(String plainText, String secretKey) throws Exception {
        SecretKey desKey = KeyGenerator.getInstance("DESede").generateKey();
        Cipher cipher = Cipher.getInstance(DES_ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(secretKey.getBytes(), "DES"));
        byte[] encryptBytes = cipher.doFinal(plainText.getBytes());
        return Base64.getEncoder().encodeToString(encryptBytes);
    }

    /**
    * 使用DES解密数据
    * @param encryptText 待解密的密文
    * @param secretKey 密钥
    * @return 解密后的数据
    */
    public static String decrypt(String encryptText, String secretKey) throws Exception {
        byte[] encryptBytes = Base64.getDecoder().decode(encryptText);
        Cipher cipher = Cipher.getInstance(DES_ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(secretKey.getBytes(), "DES"));
        byte[] decryptBytes = cipher.doFinal(encryptBytes);
        return new String(decryptBytes);
    }
}

2. AES 加密算法

代码示例:

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

public class AesEncryptor {
    private static final String AES_ALGORITHM = "AES/ECB/PKCS5Padding";

    /**
    * 使用AES加密数据
    * @param plainText 待加密的明文
    * @param secretKey 密钥
    * @return 加密后的数据
    */
    public static String encrypt(String plainText, String secretKey) throws Exception {
        SecretKey aesKey = KeyGenerator.getInstance("AES").generateKey();
        Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(secretKey.getBytes(), "AES"));
        byte[] encryptBytes = cipher.doFinal(plainText.getBytes());
        return Base64.getEncoder().encodeToString(encryptBytes);
    }

    /**
    * 使用AES解密数据
    * @param encryptText 待解密的密文
    * @param secretKey 密钥
    * @return 解密后的数据
    */
    public static String decrypt(String encryptText, String secretKey) throws Exception {
        byte[] encryptBytes = Base64.getDecoder().decode(encryptText);
        Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(secretKey.getBytes(), "AES"));
        byte[] decryptBytes = cipher.doFinal(encryptBytes);
        return new String(decryptBytes);
    }
}

非对称加密算法

非对称加密算法是一种加密和解密使用不同密钥的加密算法,比如常见的 RSA 加密。

3. RSA 加密算法

代码示例:

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;
import java.util.Base64;

public class RsaEncryptor {
    private static final String RSA_ALGORITHM = "RSA/ECB/PKCS1Padding";

    /**
    * 使用RSA加密数据
    * @param plainText 待加密的明文
    * @return 加密后的数据
    */
    public static String encrypt(String plainText) throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(1024);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encryptBytes = cipher.doFinal(plainText.getBytes());
        return Base64.getEncoder().encodeToString(encryptBytes);
    }

    /**
    * 使用RSA解密数据
    * @param encryptText 待解密的密文
    * @return 解密后的数据
    */
    public static String decrypt(String encryptText) throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(1024);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        PrivateKey privateKey = keyPair.getPrivate();
        byte[] encryptBytes = Base64.getDecoder().decode(encryptText);
        Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decryptBytes = cipher.doFinal(encryptBytes);
        return new String(decryptBytes);
    }
}

消息摘要算法

消息摘要算法是一种将任意长度的消息转换成固定长度(通常比较短)摘要或消息认证码的算法。

4. MD5 加密算法

代码示例:

import java.security.MessageDigest;
import java.util.Base64;

public class Md5Encryptor {

    /**
    * 使用MD5加密数据
    * @param plainText 待加密的明文
    * @return 加密后的数据
    */
    public static String encrypt(String plainText) throws Exception {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] bytes = md.digest(plainText.getBytes());
        return Base64.getEncoder().encodeToString(bytes);
    }
}

总结

本文介绍了Java常用的四种加密算法,分别是DES加密算法、AES加密算法、RSA加密算法和MD5加密算法。这些算法都有其应用场景和特点,在实际开发中可以根据业务需求进行选择使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:分享Java常用几种加密算法(四种) - Python技术站

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

相关文章

  • SpringBoot使用Hibernate拦截器实现时间自动注入的操作代码

    这里是详细的攻略: 使用Hibernate拦截器实现时间自动注入 在SpringBoot中,我们通常使用Hibernate作为ORM框架来操作数据库。Java中的时间类型使用起来非常方便,但是在数据库中,为了统一格式,我们经常需要将时间类型转换为特定的格式并存储在数据库中。使用Hibernate拦截器可以方便地实现对时间的自动注入。 Hibernate拦截器…

    Java 2023年5月20日
    00
  • Java创建与结束线程代码示例

    创建线程是使用Java多线程的基本步骤之一,可以使用线程类或者实现Runnable接口的线程对象。结束线程可以使用stop方法,但因为此方法可能会导致不可预知的结果而被废弃,因此推荐使用条件退出方式停止线程。 以下是Java创建与结束线程的完整攻略: 创建线程 使用线程类 继承Thread类并实现run方法,run方法中包含当前线程的操作逻辑。然后创建线程对…

    Java 2023年5月18日
    00
  • 如何开发一个简单的Akka Java应用

    如何开发一个简单的Akka Java应用 Akka 是一个构建并发、分布式、可扩展的消息驱动应用程序的工具包与运行时。 要开发一个简单的Akka Java应用,可以按照以下步骤进行。 步骤一:添加依赖 在项目的 pom.xml 文件中添加以下依赖: <dependencies> <dependency> <groupId>…

    Java 2023年5月26日
    00
  • 在JavaScript中使用for循环的方法

    在 JavaScript 中,for 循环用于重复执行某些代码。for 循环通常用于遍历数组或对象,执行相同的代码多次。 基本格式为: for (初始值; 终止条件; 增量) { // 要执行的代码块 } 其中: 初始值:定义用于循环计数的变量,并设置初始值。 终止条件:定义循环运行条件,如果该条件为 true,则循环继续执行;如果为 false,则循环结束…

    Java 2023年5月26日
    00
  • java实现文件复制、剪切文件和删除示例

    下面是“Java实现文件复制、剪切文件和删除”示例的完整攻略。 1. 复制文件 要使用Java复制文件,需要使用Java的IO库。有两种方法可以实现文件复制:通过字节流或字符流。 1.1 字节流复制 使用字节流复制文件的方法非常简单。以下是代码示例: import java.io.*; public class FileCopy { public stati…

    Java 2023年5月20日
    00
  • 关于并发编程与线程安全的思考与实践

    作者:京东健康 张娜 一、并发编程的意义与挑战 并发编程的意义是充分的利用处理器的每一个核,以达到最高的处理性能,可以让程序运行的更快。而处理器也为了提高计算速率,作出了一系列优化,比如: 1、硬件升级:为平衡CPU 内高速存储器和内存之间数量级的速率差,提升整体性能,引入了多级高速缓存的传统硬件内存架构来解决,带来的问题是,数据同时存在于高速缓存和主内存中…

    Java 2023年5月9日
    00
  • java用户管理注册功能 含前后台代码

    下面是Java用户管理注册功能的完整攻略。 1. 前期准备 在编写Java用户管理注册功能的程序前,我们需要准备以下几个方面的内容:数据库、Java Web框架和IDE。 1.1 数据库 Java用户管理与注册功能需要使用到数据库进行用户信息存储。常用的数据库有MySQL、Oracle、SQL Server等。在本教程中,我们使用MySQL数据库。 我们需要…

    Java 2023年5月19日
    00
  • JSP如何连接DB2数据库

    JSP(JavaServer Pages)是一种Java技术,可用于开发动态网页。连接DB2数据库是JSP开发过程中的重要组成部分之一,本文将给出连接DB2数据库的完整攻略,包括以下步骤: 导入数据库驱动 在使用JSP连接DB2数据库之前,需要先导入数据库驱动,这里以DB2 JDBC驱动为例。 示例代码: <%@ page import="j…

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