文章目录
- 官网
- 功能概述
- Code
- 附
官网
http://www.jasypt.org/
功能概述
Jasypt 是一个 Java 库,它允许开发人员以最小的努力添加基本的加密功能,并且不需要深入了解密码学的工作原理。
- 高安全性、基于标准的加密技术,适用于单向和双向加密。加密密码、文本、数字、二进制文件…
- 与 Hibernate 的透明集成
- 适合集成到基于 Spring 的应用程序中,也可以与 Spring Security 透明集成
- 用于加密应用程序配置(即数据源)的集成功能
- 多处理器/多核系统中高性能加密的特定功能
- 开放 API,可与任何 JCE 提供商一起使用
Code
<dependency><groupId>com.iluwatar</groupId><artifactId>jaspyt</artifactId><version>1.9.3</version>
</dependency>
package com.artisan.jasypt.javaway;import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.util.password.BasicPasswordEncryptor;
import org.jasypt.util.text.BasicTextEncryptor;import java.security.SecureRandom;/*** @author 小工匠* @version 1.0* @mark: show me the code , change the world** http://www.jasypt.org/download.html*/
public class JasyptExample {/*** 程序的主入口函数。* 该函数不接受参数,也不返回任何值。* 依次调用了以下几个示例函数:* 1. basicExample - 展示基本示例。* 2. oneWayPasswordExample - 展示使用一次性密码的示例。* 3. changeAlgorithmExample - 展示改变算法的示例。* 4. multiThreadDecryptExample - 展示多线程解密的示例。*/public static void main(String[] args) {basicExample();oneWayPasswordExample();changeAlgorithmExample();multiThreadDecryptExample();}/*** 生成一个安全的随机密码。* 该函数不接受任何参数。** @return 返回一个由随机字符组成的密码字符串。密码由大写字母、小写字母和数字组成,长度为16个字符。*/private static String generateSecurePassword() {// 创建一个安全随机数生成器SecureRandom random = new SecureRandom();// 定义密码可能包含的字符集char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();// 使用StringBuilder来构建密码字符串StringBuilder passwordBuilder = new StringBuilder();// 循环生成16个随机字符for (int i = 0; i < 16; i++) {// 从字符集中随机选择一个字符,并将其添加到密码字符串中passwordBuilder.append(chars[random.nextInt(chars.length)]);}System.out.println("key:" + passwordBuilder);// 返回构建好的密码字符串return passwordBuilder.toString();}/*** 简单文本加密示例* 该方法演示了如何使用BasicTextEncryptor对文本进行加密和解密。* 该示例不接受参数,也不返回值。*/protected static void basicExample() {BasicTextEncryptor basicTextEncryptor = new BasicTextEncryptor();// 使用动态生成的密钥,提高安全性String securePassword = generateSecurePassword();basicTextEncryptor.setPassword(securePassword);try {// 加密文本信息String encryptedText = basicTextEncryptor.encrypt("artisan*");System.out.println("encryptedText:" + encryptedText);// 解密已加密的文本信息String decryptedText = basicTextEncryptor.decrypt(encryptedText);System.out.println("decryptedText:" + decryptedText);} catch (Exception e) {// 处理加密/解密过程中可能出现的异常System.err.println("Error during encryption or decryption: " + e.getMessage());}}/*** 展示单向密码加密的示例。* <p>* 两种方案:* 一种方案是把数据库中的密文解密成明文,再与用户输入的密码进行对比;* 另一种方案是把用户输入的密码进行加密,把加密后的密文与数据库的密文进行对比。* <p>* 第二种方案是更合理的,一方面是因为加密比解密更容易,性能更好;* 另一方面是减少明文出现的次数,保证安全性。* 第二种方案完全不需要解密,所以我们只需要单向地密码加密便可以了*/private static void oneWayPasswordExample() {// 创建BasicPasswordEncryptor实例用于密码加密和验证BasicPasswordEncryptor encryptor = new BasicPasswordEncryptor();// 加密密码 "artisan*"String encryptedPassword = encryptor.encryptPassword("artisan*");// 检查密码 "artisan*" 是否与加密后的密码匹配,并打印结果System.out.println(encryptor.checkPassword("artisan*", encryptedPassword));// 检查密码 "Artisan*" (大写) 是否与加密后的密码匹配,并打印结果,预期为不匹配System.out.println(encryptor.checkPassword("Artisan*", encryptedPassword));}/*** 该示例演示如何改变加密算法。* 该方法不接受参数且无返回值。* 主要步骤包括创建加密器、设置密码和算法、加密数据以及解密数据。* <p>* 自定义地使用不同的算法进行加密解密*/private static void changeAlgorithmExample() {StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();System.out.println("---------");// 设置加密器的密码//encryptor.setPassword(generateSecurePassword());encryptor.setPassword("rQIVmVRhL7Zr2Kmu");// 设置加密器使用的加密算法encryptor.setAlgorithm("PBEWithMD5AndTripleDES");// 使用加密器对文本进行加密String encryptedText = encryptor.encrypt("artisan*");System.out.println("encryptedText:" + encryptedText);// 使用加密器对加密后的文本进行解密String decryptedText = encryptor.decrypt(encryptedText);System.out.println("decryptedText:" + decryptedText);}/*** 多线程解密示例* 该方法演示了如何使用多线程进行加密和解密操作。* 注意:该方法不接受任何参数,也不返回任何值。* <p>* Jasypt提供了多线程解密操作,可以并行解密,这样可以提供更好的性能。一般建议可以设置与机器处理器核数一致的线程数进行解密*/private static void multiThreadDecryptExample() {// 创建并配置加密器,使用池化技术以支持多线程加密PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();// 设置线程池大小为6,即同时最多有6个线程执行加密操作encryptor.setPoolSize(6);// 设置加密使用的密码encryptor.setPassword(generateSecurePassword());// 设置加密算法encryptor.setAlgorithm("PBEWithMD5AndTripleDES");// 加密明文字符串String encryptedText = encryptor.encrypt("artisan*#*");System.out.println("encryptedText:" + encryptedText);// 解密密文字符串String decryptedText = encryptor.decrypt(encryptedText);System.out.println("decryptedText:" + decryptedText);}}
- generateSecurePassword: 生成一个16字符长的安全随机密码。
- basicExample: 使用
BasicTextEncryptor
对文本进行加密和解密。 - oneWayPasswordExample: 使用
BasicPasswordEncryptor
进行单向密码加密和验证。 - changeAlgorithmExample: 使用
StandardPBEStringEncryptor
并设置自定义算法进行加密和解密。 - multiThreadDecryptExample: 使用
PooledPBEStringEncryptor
进行多线程的加密和解密操作。
附
Java 加密体系 (JCA)