Java常用加密算法实例总结

yizhihongxing

Java常用加密算法实例总结

在Java开发过程中,常常需要对数据进行加密和解密处理。为了实现这个目的,Java引入了多种加密算法,本文将对Java常用的加密算法进行总结,并给出两个示例说明。

对称加密算法

对称加密算法指的是加密和解密使用相同密钥的算法。它的特点是加密和解密速度快,但密钥容易泄露。Java支持的对称加密算法有DES、3DES和AES。

DES加密算法

DES加密算法是一种对称加密算法,它的密钥长度为56位。DES算法可以使用两种模式:ECB和CBC。ECB模式是一种常用的加密模式,但它有一个问题,即相同的明文会被加密成相同的密文,加密后的数据容易受到攻击。因此,我们通常使用CBC模式来加密数据。以下是DES加密算法的示例代码:

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;

public class DesDemo {

    public static void main(String[] args) throws Exception {
        String content = "Hello, world!";
        String password = "12345678";
        byte[] encrypt = desEncrypt(content.getBytes(), password.getBytes());
        System.out.println("加密后:" + new String(encrypt));
        byte[] decrypt = desDecrypt(encrypt, password.getBytes());
        System.out.println("解密后:" + new String(decrypt));
    }

    public static byte[] desEncrypt(byte[] content, byte[] password) throws Exception {
        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
        DESKeySpec desKeySpec = new DESKeySpec(password);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
        IvParameterSpec iv = new IvParameterSpec(password);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
        return cipher.doFinal(content);
    }

    public static byte[] desDecrypt(byte[] content, byte[] password) throws Exception {
        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
        DESKeySpec desKeySpec = new DESKeySpec(password);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
        IvParameterSpec iv = new IvParameterSpec(password);
        cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
        return cipher.doFinal(content);
    }

}

AES加密算法

AES加密算法是一种对称加密算法,它的密钥长度可为128位、192位或256位。AES算法可以使用多种模式,包括ECB、CBC、CFB和OFB等。以下是AES加密算法的示例代码:

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class AesDemo {

    public static void main(String[] args) throws Exception {
        String content = "Hello, world!";
        String password = "1234567812345678";
        byte[] encrypt = aesEncrypt(content.getBytes(), password.getBytes());
        System.out.println("加密后:" + new String(encrypt));
        byte[] decrypt = aesDecrypt(encrypt, password.getBytes());
        System.out.println("解密后:" + new String(decrypt));
    }

    public static byte[] aesEncrypt(byte[] content, byte[] password) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        SecretKeySpec secretKeySpec = new SecretKeySpec(password, "AES");
        IvParameterSpec iv = new IvParameterSpec(password);
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, iv);
        return cipher.doFinal(content);
    }

    public static byte[] aesDecrypt(byte[] content, byte[] password) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        SecretKeySpec secretKeySpec = new SecretKeySpec(password, "AES");
        IvParameterSpec iv = new IvParameterSpec(password);
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, iv);
        return cipher.doFinal(content);
    }

}

非对称加密算法

非对称加密算法指的是加密和解密使用不同密钥的算法。它的特点是密钥不易泄露,但加密和解密速度较慢。Java支持的非对称加密算法有RSA、DSA和ECDSA等。

RSA加密算法

RSA加密算法是一种非对称加密算法,它的密钥包括公钥和私钥。公钥用于加密数据,私钥用于解密数据。以下是RSA加密算法的示例代码:

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

public class RsaDemo {

    public static void main(String[] args) throws Exception {
        String content = "Hello, world!";
        KeyPair keyPair = generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();
        byte[] encrypt = rsaEncrypt(content.getBytes(), publicKey);
        System.out.println("加密后:" + new String(encrypt));
        byte[] decrypt = rsaDecrypt(encrypt, privateKey);
        System.out.println("解密后:" + new String(decrypt));
    }

    public static KeyPair generateKeyPair() throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(1024);
        return keyPairGenerator.generateKeyPair();
    }

    public static byte[] rsaEncrypt(byte[] content, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        return cipher.doFinal(content);
    }

    public static byte[] rsaDecrypt(byte[] content, PrivateKey privateKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        return cipher.doFinal(content);
    }

}

总结

本文对Java常用的加密算法进行了详细讲解,包括对称加密算法和非对称加密算法。本文还给出了两个示例说明,分别涉及DES加密算法和AES加密算法。需要注意的是,加密和解密操作需要保证使用相同的密钥或密钥对,否则无法进行正确的加解密操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java常用加密算法实例总结 - Python技术站

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

相关文章

  • Kotlin如何使用类似C#的yield功能详解

    接下来我将为您详细讲解“Kotlin如何使用类似C#的yield功能详解”: 1. yield的作用 在C#中,yield关键字可以将一个方法声明为生成器(generator),可以将其定义为作为一个迭代器(iterator)。当生成器方法被调用时,它会返回一个迭代器对象,通过该迭代器我们可以遍历一个序列,而这个序列是按需生成的。这种生成序列的方法可以将操作…

    Java 2023年5月19日
    00
  • Java实现的mysql事务处理操作示例

    当我们想要在Java应用程序中使用MySQL数据库时,需要处理事务操作。这里,我将向您展示如何使用Java和JDBC来处理MySQL事务。下面是一个完整攻略: 1. 添加MySQL JDBC驱动 在使用MySQL数据库之前,我们需要在Java项目中添加相应的MySQL JDBC驱动。您可以从官方网站下载最新的JDBC驱动程序,也可以使用第三方依赖管理工具,如…

    Java 2023年5月19日
    00
  • Java中的继承是什么?

    Java中的继承是面向对象编程中很重要的一种机制。通过继承,我们可以创建一个新类,从已有的类中继承属性和方法,并且可以对这些属性和方法进行修改、扩展或重写。继承可以提高代码的复用性,减少代码冗余,简化程序设计。 Java中,继承是通过使用 extends 关键字来实现的。下面是一个简单的示例: public class Animal { public voi…

    Java 2023年4月27日
    00
  • Java Collection集合的三种遍历方式详解

    Java Collection集合的三种遍历方式详解 在Java中,集合(Collection)是一种常见的数据结构,常用于存储、操作一组对象的场景中。集合提供了多种遍历方式,本文将详细介绍三种常见的遍历方式及其区别。 遍历方式一:for循环 for循环是最常见的遍历方式,它适用于所有类型的集合。使用for循环遍历集合需要以下步骤: for (Iterato…

    Java 2023年5月26日
    00
  • Kafka Producer中的消息缓存模型图解详解

    以下是关于“Kafka Producer中的消息缓存模型图解详解”的完整攻略: Kafka Producer中的消息缓存模型图解详解 什么是Kafka Producer? Kafka是目前人气逐渐上升的一个分布式流媒体平台,其中包括Kafka Producer、Kafka Consumer、Kafka Connect、Kafka Streams和Kafka …

    Java 2023年5月20日
    00
  • Java字符串比较方法equals的空指针异常的解决

    Java中,字符串比较方法equals是常用的判断两个字符串是否相等的方法,但在使用equals方法比较字符串时,若其中一个字符串为null,就会抛出空指针异常,如下所示: String str1 = "Hello World"; String str2 = null; if (str1.equals(str2)) { //空指针异常 S…

    Java 2023年5月27日
    00
  • java集合类源码分析之Set详解

    让我来详细讲解一下“Java集合类源码分析之Set详解”的完整攻略。 目录 Set概述 Java Set实现方式 Set常用方法及实现原理 TreeSet示例 HashSet示例 1. Set概述 Set是Java中的一个集合接口,用于存储不允许重复元素的集合。Set接口实现了Collection接口,所以Set集合也继承了Collection集合中的一些方…

    Java 2023年5月20日
    00
  • 如何编写Java集成测试?

    当我们开发Java应用程序时,编写测试代码可以帮助我们检查和验证我们的代码是否正确。除了单元测试之外,集成测试也是一个非常重要的测试类型。在编写集成测试时,我们将多个组件集成在一起并测试它们之间的交互。下面是编写Java集成测试的完整使用攻略: 1. 确定要测试的组件 在编写集成测试之前,您需要确定要测试的组件,并将它们集成起来。通常情况下,这些组件可以是数…

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