常见的Java加密算法有哪些?

常见的Java加密算法有以下几种:对称加密算法、非对称加密算法和散列算法。

  1. 对称加密算法

对称加密算法是指发送方和接收方使用相同的密钥对数据进行加密和解密。常见的对称加密算法有DES、3DES、AES、Blowfish等。

以AES算法为例,以下为使用步骤:

1)生成密钥

SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();

2)加密数据

Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedData = cipher.doFinal("hello world".getBytes());

3)解密数据

Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
  1. 非对称加密算法

非对称加密算法是指发送方和接收方使用不同的密钥对数据进行加密和解密。常见的非对称加密算法有RSA、DSA等。

以RSA算法为例,以下为使用步骤:

1)生成密钥对

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
PublicKey publicKey = keyPair.getPublic();

2)加密数据

Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedData = cipher.doFinal("hello world".getBytes());

3)解密数据

Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
  1. 散列算法

散列算法是指将任意长度的数据转换为固定长度的散列值的算法。常见的散列算法有MD5、SHA1、SHA256等。

以MD5算法为例,以下为使用步骤:

1)计算散列值

MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte[] md5Bytes = messageDigest.digest("hello world".getBytes());
String md5Str = new BigInteger(1, md5Bytes).toString(16);

至少包含两条示例说明:

示例1:使用AES算法对文件进行加密和解密

// 加密文件
public static void encryptFile(File sourceFile, File destFile) throws Exception {
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.ENCRYPT_MODE, getSecretKey());
    FileInputStream fis = new FileInputStream(sourceFile);
    FileOutputStream fos = new FileOutputStream(destFile);
    byte[] buffer = new byte[1024];
    int len;
    while ((len = fis.read(buffer)) != -1) {
        byte[] encryptedData = cipher.update(buffer, 0, len);
        fos.write(encryptedData);
    }
    byte[] encryptedData = cipher.doFinal();
    fos.write(encryptedData);
    fis.close();
    fos.close();
}

// 解密文件
public static void decryptFile(File sourceFile, File destFile) throws Exception {
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, getSecretKey());
    FileInputStream fis = new FileInputStream(sourceFile);
    FileOutputStream fos = new FileOutputStream(destFile);
    byte[] buffer = new byte[1024];
    int len;
    while ((len = fis.read(buffer)) != -1) {
        byte[] decryptedData = cipher.update(buffer, 0, len);
        fos.write(decryptedData);
    }
    byte[] decryptedData = cipher.doFinal();
    fos.write(decryptedData);
    fis.close();
    fos.close();
}

// 获取AES密钥
public static SecretKey getSecretKey() throws NoSuchAlgorithmException {
    KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
    keyGenerator.init(128);
    return keyGenerator.generateKey();
}

示例2:使用MD5算法对密码进行加密和验证

// 对密码进行加密
public static String encryptPassword(String password) throws NoSuchAlgorithmException {
    MessageDigest messageDigest = MessageDigest.getInstance("MD5");
    byte[] md5Bytes = messageDigest.digest(password.getBytes());
    return new BigInteger(1, md5Bytes).toString(16);
}

// 验证密码是否正确
public static boolean verifyPassword(String inputPassword, String encryptedPassword) throws NoSuchAlgorithmException {
    return encryptedPassword.equals(encryptPassword(inputPassword));
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:常见的Java加密算法有哪些? - Python技术站

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

相关文章

  • 详解SpringBoot静态方法获取bean的三种方式

    下面是详解Spring Boot静态方法获取bean的三种方式的完整攻略。 1. 使用ApplicationContextAware接口 通过实现ApplicationContextAware接口,可以获取ApplicationContext上下文,并在静态方法中获取bean。 示例代码: @Component public class BeanUtils …

    Java 2023年5月31日
    00
  • Spring存储与读取Bean对象方法

    下面是关于”Spring存储与读取Bean对象方法”的完整攻略。 1. 前置知识 在学习本文之前,建议先掌握以下知识: Java基础 Spring基础 Spring IOC 2. 存储Bean对象到Spring容器 在Spring框架中,可以通过ApplicationContext接口来加载Bean对象,也可以将Bean对象保存到容器中。具体实现方式有两种:…

    Java 2023年5月26日
    00
  • JavaEE Spring MyBatis如何一步一步实现数据库查询功能

    一、概述JavaEE 是一个企业级应用开发框架,Spring 是 JavaEE 中最常用的框架之一,MyBatis 是一款优秀的 ORM 框架,通过使用这三个框架,可以轻松实现一个 JavaEE 企业级应用。本文将以一个简单的文章阅读网站为例,介绍 JavaEE Spring MyBatis 如何一步一步实现数据库查询功能。 二、环境准备1. JDK 1.8…

    Java 2023年5月31日
    00
  • Java 数据结构与算法系列精讲之数组

    Java 数据结构与算法系列精讲之数组 数组的定义和基本操作 数组是一种线性数据结构,它由一系列相同类型的元素组成,这些元素在内存中连续存储。 定义 在Java中定义数组需要指定数据类型和数组长度,例如: int[] arr = new int[10]; // 定义一个长度为10的整型数组 基本操作 数组的基本操作包括了以下几个方面: 初始化:默认初始化为类…

    Java 2023年5月19日
    00
  • Java反射,泛型在Json中的运用

    【Java反射,泛型在Json中的运用】 1. Java反射在Json中的运用 1.1 什么是Java反射 Java反射是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法。对于任意一个对象,都能够调用它的任意方法和属性。这种动态获取对象信息以及动态调用对象方法的功能称为Java反射。 1.2 在Json中使用Java反射 在Java开发中,J…

    Java 2023年5月26日
    00
  • spring boot项目如何采用war在tomcat容器中运行

    下面是Spring Boot项目如何部署到Tomcat容器中运行的攻略: 一、将项目打成war包 Spring Boot项目通常打成jar包,但是要部署到Tomcat容器中需要将其打成war包。如果使用Maven构建项目,则只需在pom.xml文件中添加以下代码: <packaging>war</packaging> 这样项目就会被打…

    Java 2023年6月2日
    00
  • Java详解使用线程池处理任务方法

    Java详解使用线程池处理任务方法 线程池 线程池是一种重复利用线程资源的机制,线程池中预先创建一定数量的线程,当有任务需要执行时,直接使用一个线程来执行任务,当任务执行完毕后,线程不会立即销毁,而是返回线程池中,等待下一次任务的执行。这样可以避免线程频繁创建和销毁带来的开销,提高程序的运行效率。 线程池的使用 创建线程池 Java中提供了线程池的实现,我们…

    Java 2023年5月18日
    00
  • SpringMVC执行步骤、Model的使用详解

    以下是关于“SpringMVC执行步骤、Model的使用详解”的完整攻略,其中包含两个示例。 1. 前言 SpringMVC是一种常用的Java Web开发框架,它可以帮助开发者快速构建Web应用程序。本攻略将详细讲解SpringMVC的执行步骤和Model的使用方法,帮助读者更好地掌握SpringMVC框架的使用方法。 2. SpringMVC的执行步骤 …

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