分享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日

相关文章

  • SpringSecurity实现前后端分离的示例详解

    为了讲解本文的主题,我们需要先了解以下几个概念: 前后端分离:前后端分离是指将前端和后端业务逻辑分开,前端主要负责展示数据和交互逻辑,后端主要负责提供API接口和业务逻辑。 Spring Security:Spring Security是基于Spring框架的安全框架,主要提供身份认证、授权、攻击防护等安全功能。 Token认证:Token认证是一种基于To…

    Java 2023年5月20日
    00
  • java实现登录窗口

    下面就是Java实现登录窗口的攻略: 1. 准备工作 在Java中实现登录窗口,首先要准备以下几项工作: Java开发环境,如JDK或者集成开发环境(IDE); Swing类库,它是Java中的图形用户界面(GUI)工具包,用于构建界面组件; 了解Java的事件机制,因为登录窗口需要监听用户的操作。 2. 创建登录窗口 要创建一个登录窗口,需要用到Java中…

    Java 2023年5月19日
    00
  • 为Java程序员准备的10分钟Perl教程

    为Java程序员准备的10分钟Perl教程是一份旨在通过简短的教学来为Java程序员介绍Perl的基础知识的文档。下面是一份完整攻略: 简介 在这份教程中,我们将学习Perl的基础知识。Perl是一种通用的脚本语言,特别适合快速开发。Perl有一个庞大的社区以及丰富的文档和库。 变量 在Perl中声明变量不需要指定类型。变量的类型会随着所存储的数据类型而变化…

    Java 2023年5月23日
    00
  • 如何解决Mybatis–java.lang.IllegalArgumentException: Result Maps collection already contains value for X

    如何解决Mybatis–java.lang.IllegalArgumentException: Result Maps collection already contains value for X 的问题 Mybatis 是一个轻量级的 ORM 框架,可以很好地实现 Java 对数据库的操作,但在使用中可能会出现java.lang.IllegalArgu…

    Java 2023年5月26日
    00
  • 浅谈java定时器的发展历程

    浅谈Java定时器的发展历程 什么是定时器 定时器是一种在预设时间内周期性地执行任务的机制,通常用于定期执行一些任务,或者实现某些重复性的操作。在Java中,定时器一般是基于Timer类和ScheduledExecutorService实现的。 Java定时器的发展历程 Timer 在Java最早的版本中,Timer是实现定时器功能的主要类。它可以通过sch…

    Java 2023年5月26日
    00
  • JSP 动态树的实现

    JSP(Java Server Pages)是一种使用 Java 技术编写的服务器端网页开发语言。JSP 动态树可以实现网页上的动态菜单、目录等功能,增强了网页的交互性。在下面的攻略中,我将介绍如何使用 JSP 实现动态树。 1. 准备工作 首先,需要在项目中引入 JSTL(JSP Standard Tag Library)包。可以在 Maven 仓库中查找…

    Java 2023年6月15日
    00
  • mybatis多表查询的实现(xml方式)

    下面我将详细讲解mybatis多表查询的实现(xml方式)的完整攻略。 1. 前置条件 在进行mybatis多表查询的实现之前,确保已经完成以下几个步骤:- 按照mybatis官方文档指导,搭建好mybatis并集成到项目中- 确认数据库和数据表已经建好- 熟悉mybatis的基础用法,包括xml配置、映射、CRUD等操作 2. 实现步骤 2.1 关联映射的…

    Java 2023年5月20日
    00
  • java web实现网上手机销售系统

    Java Web实现网上手机销售系统的完整攻略主要包括以下几个步骤: 1.需求分析 首先需要明确网上手机销售系统的功能需求,包括前台页面、后台管理系统、交互流程等。具体包括用户注册、登录、浏览商品、加入购物车、结算、支付等一系列操作。同时,应考虑系统的安全性、可扩展性、性能等方面的问题。 选择开发框架 在开发过程中,可以选择一些成熟的Java Web框架,如…

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