Java 四种基本加密算法分析

yizhihongxing

Java 四种基本加密算法分析

在Java中,有四种基本的加密算法,分别是:DES、AES、RSA 和 MD5。本文将对四种算法进行详细讲解,并给出相关的示例说明。

DES 加密算法

DES(Data Encryption Standard)是一种对称加密算法,其密钥长度为64位,加密和解密使用相同的密钥。DES算法的加密过程如下:

  1. 将明文进行填充,使其长度为64的整数倍;
  2. 将填充后的明文划分成64位一组,称为数据块,最后一个数据块不足64位时进行填充;
  3. 对于每一组数据块,先进行初始置换 IP,然后进行16轮迭代,每轮迭代包括以下四步:置换、S盒代替、P盒置换和异或操作;
  4. 最后一轮迭代之后,交换左右两个32位的子块,然后进行最终置换 IP^-1,得到密文。

以下是Java实现DES加密的示例代码:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class DESUtil {

    private static final String DEFAULT_CIPHER_ALGORITHM = "DES/ECB/PKCS5Padding";

    // 生成DES密钥
    public static byte[] generateKey() throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
        keyGenerator.init(56);
        SecretKey secretKey = keyGenerator.generateKey();
        return secretKey.getEncoded();
    }

    // DES加密
    public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
        SecretKeySpec keySpec = new SecretKeySpec(key, "DES");
        Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, keySpec);
        return cipher.doFinal(data);
    }

    // DES解密
    public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
        SecretKeySpec keySpec = new SecretKeySpec(key, "DES");
        Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, keySpec);
        return cipher.doFinal(data);
    }
}

AES 加密算法

AES(Advanced Encryption Standard)是一种对称加密算法,其密钥长度可以为128、192或256位,加密和解密使用相同的密钥。AES算法的加密过程如下:

  1. 将明文进行填充,使其长度为128的整数倍;
  2. 将填充后的明文划分成128位一组,称为数据块,最后一个数据块不足128位时进行填充;
  3. 对于每一组数据块,先进行轮密钥加,然后进行10轮迭代,每轮迭代包括以下四步:字节代替、行移位、列混淆和轮密钥加;
  4. 最后一轮迭代之后,进行末轮处理,得到密文。

以下是Java实现AES加密的示例代码:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class AESUtil {

    private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";

    // 生成AES密钥
    public static byte[] generateKey(int keySize) throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(keySize);
        SecretKey secretKey = keyGenerator.generateKey();
        return secretKey.getEncoded();
    }

    // AES加密
    public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
        SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
        Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, keySpec);
        return cipher.doFinal(data);
    }

    // AES解密
    public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
        SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
        Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, keySpec);
        return cipher.doFinal(data);
    }
}

RSA 加密算法

RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,其密钥分为公钥和私钥,公钥用于加密数据,私钥用于解密数据。RSA算法的加密过程如下:

  1. 选取两个大质数p和q,计算N=p*q;
  2. 计算φ(N)=(p-1)*(q-1);
  3. 随机生成一个整数e,使得1<e<φ(N),且e与φ(N)互质;
  4. 计算d,使得(e*d) mod φ(N)=1;
  5. 将明文转换成数字M,使得0<=M<N;
  6. 计算密码文C=(M^e) mod N。

以下是Java实现RSA加密的示例代码:

import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;

public class RSAUtil {

    private static final String DEFAULT_CIPHER_ALGORITHM = "RSA/ECB/PKCS1Padding";

    // 生成RSA密钥对
    public static KeyPair generateKeyPair(int keySize) throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(keySize);
        return keyPairGenerator.generateKeyPair();
    }

    // RSA公钥加密
    public static byte[] encrypt(byte[] data, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        return cipher.doFinal(data);
    }

    // RSA私钥解密
    public static byte[] decrypt(byte[] data, PrivateKey privateKey) throws Exception {
        Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        return cipher.doFinal(data);
    }
}

MD5 散列算法

MD5(Message-Digest Algorithm 5)是一种散列算法,其作用是将任意长度的数据压缩成一个128位的散列值(即摘要值)。MD5算法的加密过程如下:

  1. 将明文进行填充,使其长度为512的整数倍;
  2. 将填充后的明文划分成512位一组,称为消息分组;
  3. 对于每一组消息分组,进行四轮迭代,每轮迭代包括以下四步:置换、非线性函数、循环移位和轮密钥加;
  4. 最后一轮迭代之后,将四个32位字沿着大端顺序连接起来,得到128位的散列值。

以下是Java实现MD5散列的示例代码:

import java.security.MessageDigest;

public class MD5Util {

    public static byte[] encrypt(byte[] data) throws Exception {
        MessageDigest messageDigest = MessageDigest.getInstance("MD5");
        return messageDigest.digest(data);
    }
}

示例说明

  1. DES加解密示例
public static void main(String[] args) {
    try {
        // 生成DES密钥
        byte[] key = DESUtil.generateKey();
        // 明文
        String plainText = "This is a plain text";
        byte[] plainData = plainText.getBytes();
        // DES加密
        byte[] encryptData = DESUtil.encrypt(plainData, key);
        // DES解密
        byte[] decryptData = DESUtil.decrypt(encryptData, key);
        // 显示结果
        System.out.println("Plain Text: " + plainText);
        System.out.println("Encrypted Data: " + new String(encryptData));
        System.out.println("Decrypted Data: " + new String(decryptData));
    } catch (Exception e) {
        e.printStackTrace();
    }
}
  1. RSA加解密示例
public static void main(String[] args) {
    try {
        // 生成RSA密钥对
        KeyPair keyPair = RSAUtil.generateKeyPair(1024);
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();
        // 明文
        String plainText = "This is a plain text";
        byte[] plainData = plainText.getBytes();
        // RSA公钥加密
        byte[] encryptData = RSAUtil.encrypt(plainData, publicKey);
        // RSA私钥解密
        byte[] decryptData = RSAUtil.decrypt(encryptData, privateKey);
        // 显示结果
        System.out.println("Plain Text: " + plainText);
        System.out.println("Encrypted Data: " + new BigInteger(encryptData).toString(16));
        System.out.println("Decrypted Data: " + new String(decryptData));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

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

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

相关文章

  • Spring的事务控制实现方法

    下面我来详细讲解Spring的事务控制实现方法的完整攻略。 什么是事务控制 事务控制是指确保数据库的一组操作能够完全成功或完全失败的过程。 在访问数据库时,通常会涉及多次数据库操作,事务控制可将这些操作组合成一个事务,使它们作为一个整体被执行。 如果事务中的任何一个操作失败,整个事务都会被回滚,从而确保数据库的一致性。 Spring中事务控制的实现方法 Sp…

    Java 2023年5月20日
    00
  • mybatis查询语句揭秘之参数解析

    下面是关于”mybatis查询语句揭秘之参数解析”的完整攻略。 什么是参数解析? 在Mybatis框架中,#{}和${}是两种常用的参数占位表达式。它们在执行sql语句时,代表不同的参数解析方式。 #{}表示的是预编译的SQL语句参数占位符,会将传入的参数使用JDBC的预编译功能进行替换,可以有效地防止SQL注入攻击。 ${}表示的是占位符,会将参数直接拼接…

    Java 2023年5月20日
    00
  • Java实现超市会员管理系统

    Java实现超市会员管理系统攻略 准备工作 安装Java开发环境:推荐使用Eclipse或IntelliJ IDEA等集成开发环境。 了解Java GUI开发框架:Java Swing。 选择数据库:常用的关系型数据库有MySQL、Oracle、SQL Server等,非关系型数据库有MongoDB、Redis等。 功能设计 根据超市的实际情况,确定要实现的…

    Java 2023年5月24日
    00
  • 什么是Java调试技术?

    什么是Java调试技术 Java调试技术是在开发过程中定位和解决问题的必备能力之一。它通过一系列调试工具、调试器和技巧,帮助我们快速定位代码问题并进行修复。 Java调试技术的使用攻略 步骤1:启用调试模式 在开发Java应用程序时,应该启用调试模式,这样可以让我们在程序中设置断点,并允许调试器来监视变量和执行。 在启用调试模式时,需要在运行Java应用程序…

    Java 2023年5月11日
    00
  • Sprint Boot @ExceptionHandler使用方法详解

    @ExceptionHandler是Spring Boot中的一个注解,它用于处理控制器方法中抛出的异常。在使用Spring Boot开发Web应用程序时,@ExceptionHandler是非常重要的。本文将详细介绍@ExceptionHandler的作用和使用方法,并提供两个示例说明。 @ExceptionHandler的作用 @ExceptionHan…

    Java 2023年5月5日
    00
  • Java的JSTL标签库详解

    Java的JSTL标签库详解 什么是JSTL JSTL是Java服务器标准标签库的简称,它是在Java Web开发中常用的JSP标签扩展库。JSTL的主要作用是为JSP页面提供扩展标签集,它们封装了常用的JSP页面动作,比如条件语句、循环语句等,可以让我们开发Web应用更加简单、高效、可维护。 JSTL的分类 JSTL根据其功能分为五个类型: Core 标签…

    Java 2023年5月26日
    00
  • Java实现几种常见排序算法代码

    Java实现几种常见排序算法代码 在本文中,我们将介绍 6 种常见的排序算法的 Java 代码实现,这些排序算法分别是: 冒泡排序 选择排序 插入排序 快速排序 归并排序 堆排序 为了方便说明,我们将在每个排序算法的代码实现中使用一个简单的示例数组 arr,用于展示排序前与排序后的结果。示例代码如下: int[] arr = {5, 2, 8, 3, 9, …

    Java 2023年5月19日
    00
  • 让Apache Shiro保护你的应用

    Apache Shiro是一个能够保护Java应用程序的开源安全框架。它提供了身份验证、授权、会话管理和加密等安全功能,可被用于Web、RESTful、Service和其他应用程序等场景,可用于保护您的应用。下面是针对如何使用Apache Shiro保护您的应用程序的完整攻略: 第一步:添加Shiro依赖 您需要将Shiro依赖添加到您的项目中。Shiro提…

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