Java常用加密算法实例总结

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日

相关文章

  • Java实现快速并查集

    让我来为大家详细讲解一下Java实现快速并查集的完整攻略。 什么是并查集 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。并查集的进阶版可以使用路径压缩和按秩合并的算法,使时间复杂度更加优秀。 Java实现快速并查集 下面我们将通过一个完整的Java实现过程,来详细讲解如何实现一个快…

    Java 2023年5月19日
    00
  • Java实现简单汽车租赁系统

    Java实现简单汽车租赁系统的完整攻略 系统需求分析 该汽车租赁系统应该具备以下功能: 显示当前的租赁车辆列表 租客可以查询所需汽车类型的库存量 租客可以租车,并计算租车天数、费用等信息 车辆归还,更新库存 系统设计 类的设计-属性和方法 Car(汽车类) 属性: carType:汽车类型 carId:汽车编号 carPrice:汽车租金(元/天) isRe…

    Java 2023年5月19日
    00
  • 用javascript实现div可编辑的常见方法

    使用JavaScript实现DIV可编辑通常有以下几种方法: contentEditable属性 contentEditable属性是HTML5的内容编辑属性,可以将HTML元素设置为可编辑的。我们可以将一个div元素的contentEditable属性设置为true,使其成为可编辑。 HTML代码: <div contenteditable=&quo…

    Java 2023年6月15日
    00
  • JSP上传文件到指定位置实例代码

    下面我将详细讲解“JSP上传文件到指定位置实例代码”的完整攻略: 标题 JSP上传文件到指定位置实例代码 代码实现步骤 首先在 JSP 页面中使用 input 标签设置一个文件上传表单: <form action="upload.jsp" method="post" enctype="multipart…

    Java 2023年6月15日
    00
  • java中的数组初始化赋初值方式

    下面是 “Java中的数组初始化赋初值方式” 的详细攻略: 1. 静态初始化 1.1 基本数据类型静态初始化 在Java中,数组静态初始化是指在定义数组时同时为数组元素赋初值。基础数据类型数组的静态初始化可以采用以下方式: // 声明一个整型数组,长度为3,元素分别为1, 2, 3 int[] arr = new int[]{1, 2, 3}; // 声明一…

    Java 2023年5月26日
    00
  • java程序员必须知道的4个书写代码技巧

    Java程序员必须知道的4个书写代码技巧: 1. 编写清晰简洁的代码 编写清晰简洁的代码可以提高代码的可读性,让代码更易于维护和修改。以下是一些编写清晰简洁代码的技巧: 使用有意义的变量和函数命名,用英文单词或单词缩写命名变量和函数; 尽量减少重复代码,把重复的代码封装成函数或类; 避免使用魔法数值,使用常量代替魔法数值; 使用与语言标准一致的缩进格式和代码…

    Java 2023年5月23日
    00
  • java读取XML文件的四种方法总结(必看篇)

    下面是针对“java读取XML文件的四种方法总结(必看篇)”这篇攻略的详细讲解。 提供四种方法 该攻略提供了使用Java读取XML文件的四种方法,分别是: 使用SAX方式解析XML文件 使用DOM方式解析XML文件 使用JDOM方式解析XML文件 使用XMLBeans方式解析XML文件 对于每种方法,攻略都提供了详细的介绍和示例代码,并且针对各种场景,推荐了…

    Java 2023年5月20日
    00
  • JAVA字符串占位符使用方法实例

    JAVA字符串占位符使用方法实例 什么是字符串占位符 字符串占位符是在字符串中占有一定位置并留下标记,便于对应的变量填入字符串中,这在实际开发中十分常见。 在Java中,字符串占位符由一对大括号 {} 组成。 使用字符串占位符的语法 在Java中使用字符串占位符,可以通过 String.format() 方法来实现,语法如下: String.format(S…

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