Jasypt
是一个java库,它允许开发人员以最小的工作量为他/她的项目添加基本的加密功能,而不需要对密码学的工作原理有深入的了解。
一、特性
-
Jasypt为您提供了简单的单向(摘要)和双向加密技术。
-
用于任何 JCE 提供程序的开放 API,而不仅仅是默认的 Java VM 提供程序。 Jasypt 可以很容易地与 Bouncy Castle 等知名提供商一起使用。
-
提高用户密码的安全性。
-
二进制加密支持。Jaypt允许对二进制文件(字节数组)进行摘要和加密。在需要时对您的对象或文件进行加密(例如,用于通过网络发送)。
-
数字加密支持。除了文本和二进制文件,它还允许对数值进行摘要和加密(BigInteger和BigDecimal,为Hibernate持久性加密时支持其他数字类型)。
-
完全线程安全。
-
支持加密器/摘要池,以便在多处理器/多核系统中实现高性能。
-
包括库的轻量级(“lite”)版本,以便在移动平台等限制大小的环境中实现更好的可管理性。
-
为刚接触加密的用户提供简单、无配置的加密工具,也为高级用户提供高度可配置的标准加密工具。
-
Hibernate 3、4和5可选集成,用于以加密方式持久化映射实体的字段。字段的加密是在Hibernate映射文件中定义的,它对应用程序的其余部分保持透明(对敏感的个人数据、具有许多启用读取的用户的数据库有用…)。加密文本、二进制文件、数字、布尔值、日期。。。
-
可无缝集成到Spring应用程序中,具有针对Spring 2、Spring 3.0、Spring 3.1和Spring 4.0的特定集成功能。jasypt中的所有消化器和加密器都设计为可以从Spring轻松使用(实例化、注入依赖项…)。而且,由于它们是线程安全的,因此可以在像Spring这样的面向单例的环境中使用,而不必担心同步问题。
-
Spring Security(前身为Acegi Security)可选集成,用于为安全框架执行密码加密和匹配任务,通过使用更安全的密码加密机制提高用户密码的安全性,并为您提供更高程度的配置和控制。
-
提供高级功能,用于加密应用程序的全部或部分配置文件,包括数据库密码等敏感信息。将加密配置无缝集成到普通的、基于Spring和/或支持Hibernate的应用程序中。
-
提供易于使用的CLI(命令行界面)工具,允许开发人员初始化其加密数据,并在维护任务或脚本中包括加密/解密/摘要操作。
-
集成到Apache Wicket中,在您的安全应用程序中对URL进行更强大的加密。
-
全面的指南和javadoc文档,使开发人员能够更好地了解他们对数据的实际操作。
-
强大的字符集支持,旨在充分加密和摘要文本,无论原始字符集是什么。完全支持日语、韩语、阿拉伯语等语言。。。没有编码或平台问题。
-
非常高级别的配置功能:开发人员可以实现一些技巧,例如指示“加密器”向远程HTTPS服务器询问用于加密的密码。它可以满足您的安全需求。
二、使用
这里用SpringBoot演示Jasypt。添加依赖:
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
使用Jasypt最简单的方法是使用其简单的加密工具,这些工具被称为utils
,因为它们位于org.asypt.util
包中。
它们之所以被称为utils,是因为它们是现成的、预配置的摘要和加密器,可以在不了解其配置的情况下使用。
这些实用工具根据其打算执行的任务进行分类:
-
通用摘要(org.jasypt.util.destist.*)
-
密码加密(org.jasypt.util.Password.*)
-
文本加密(org.jasypt.util.Text.*)
-
数字加密(org.jasypt.util.Number.*)
-
二进制加密(org.jasypt.util.Binary.*)
通用摘要
org.jasypt.util.digest.Digester:它在二进制级别执行消息摘要,并且其结果与从java.security.MessageDigest对象获得的结果等效,尽管是以线程安全的方式操作的,并且实现了更适合在以bean为中心的环境中使用的接口。
@Test
public void test1() {
String message = "123";
Digester digester = new Digester();
digester.setAlgorithm("SHA-1");
byte[] digest = digester.digest(message.getBytes(StandardCharsets.UTF_8));
System.out.println(new String(digest, StandardCharsets.UTF_8));
}
密码加密
这里的所有类都实现了org.asypt.util.password.PasswordEncryptor
接口,因此如果需要,它们可以互换使用。
org.jasypt.util.password.BasicPasswordEncryptor它既可以用于在用户注册时加密密码,也可以用于在登录时检查输入密码。
BasicPasswordEncryptor passwordEncryptor = new BasicPasswordEncryptor();
String encryptedPassword = passwordEncryptor.encryptPassword(userPassword);
...
if (passwordEncryptor.checkPassword(inputPassword, encryptedPassword)) {
// correct!
} else {
// bad login!
}
org.jasypt.util.password.StrongPasswordEncryptor其实现了比PasswordEncryptor高得多的密码安全性(以更高的计算成本)。
StrongPasswordEncryptor passwordEncryptor = new StrongPasswordEncryptor();
String encryptedPassword = passwordEncryptor.encryptPassword(userPassword);
...
if (passwordEncryptor.checkPassword(inputPassword, encryptedPassword)) {
// correct!
} else {
// bad login!
}
org.jasypt.util.password.ConfigurablePasswordEncryptor这允许开发人员决定要使用的算法,以及他/她是否希望应用完整的安全密码加密机制。
ConfigurablePasswordEncryptor passwordEncryptor = new ConfigurablePasswordEncryptor();
passwordEncryptor.setAlgorithm("SHA-1");
passwordEncryptor.setPlainDigest(true);
String encryptedPassword = passwordEncryptor.encryptPassword(userPassword);
...
if (passwordEncryptor.checkPassword(inputPassword, encryptedPassword)) {
// correct!
} else {
// bad login!
}
文本加密
这里的所有类都实现了org.asypt.util.text.TextEncryptor
接口,因此如果需要,它们可以互换使用。
org.jasypt.util.text.BasicTextEncryptor这允许用户使用普通强度算法对文本数据进行加密和解密。为了能够加密和解密,这个加密器必须首先设置密码。
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
textEncryptor.setPassword(myEncryptionPassword);
...
String myEncryptedText = textEncryptor.encrypt(myText);
...
String plainText = textEncryptor.decrypt(myEncryptedText);
org.jasypt.util.text.StrongTextEncryptor这允许用户使用高强度算法对文本数据进行加密和解密。(可能需要下载并安装Java加密扩展(JCE)Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files才能使用它)。为了能够加密和解密,这个加密器必须首先设置密码。
StrongTextEncryptor textEncryptor = new StrongTextEncryptor();
textEncryptor.setPassword(myEncryptionPassword);
...
String myEncryptedText = textEncryptor.encrypt(myText);
...
String plainText = textEncryptor.decrypt(myEncryptedText);
更安全:具有更安全算法的AES256TextEncryptor util类:PBEWithHMACSHA512AndAES_256(您至少需要Java 8才能使用它):
AES256TextEncryptor textEncryptor = new AES256TextEncryptor();
textEncryptor.setPassword(myEncryptionPassword);
...
String myEncryptedText = textEncryptor.encrypt(myText);
...
String plainText = textEncryptor.decrypt(myEncryptedText);
数字加密
这里的所有类都实现了org.asypt.util.numeric.DecimalNumberEncryptor
或org.asypt.util.numeric.IntegerNumberEncrypter
接口,因此如果需要,它们可以互换使用。
org.jasypt.util.numeric.BasicIntegerNumberEncryptor这允许用户使用普通强度算法对BigInteger对象进行加密和解密。为了能够加密和解密,这个加密器必须首先设置密码。
BasicIntegerNumberEncryptor integerEncryptor = new BasicIntegerNumberEncryptor();
integerEncryptor.setPassword(myEncryptionPassword);
...
BigInteger myEncryptedNumber = textEncryptor.encrypt(myNumber);
...
BigInteger plainNumber = textEncryptor.decrypt(myEncryptedNumber);
org.jasypt.util.numeric.StrongIntegerNumberEncryptor这允许用户使用高强度算法对BigInteger对象进行加密和解密。(可能需要下载并安装Java加密扩展(JCE)Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files才能使用它)。为了能够加密和解密,这个加密器必须首先设置密码。
StrongIntegerNumberEncryptor integerEncryptor = new StrongIntegerNumberEncryptor();
integerEncryptor.setPassword(myEncryptionPassword);
...
BigInteger myEncryptedNumber = integerEncryptor.encrypt(myNumber);
...
BigInteger plainNumber = integerEncryptor.decrypt(myEncryptedNumber);
更安全:具有更安全算法的AES256DecimalNumberEncryptor util类:PBEWithHMACSHA512AndAES_256(至少需要Java 8才能使用它):
BigInteger myNumber = ...;
...
AES256IntegerNumberEncryptor numberEncryptor = new AES256IntegerNumberEncryptor();
numberEncryptor.setPassword(myEncryptionPassword);
...
BigInteger myEncryptedNumber = numberEncryptor.encrypt(myNumber);
...
BigInteger plainNumber = numberEncryptor.decrypt(myEncryptedNumber);
org.jasypt.util.numeric.BasicDecimalNumberEncryptor这允许用户使用普通强度算法对BigDecimal对象进行加密和解密。为了能够加密和解密,这个加密器必须首先设置密码。
BasicDecimalNumberEncryptor decimalEncryptor = new BasicDecimalNumberEncryptor();
decimalEncryptor.setPassword(myEncryptionPassword);
...
BigDecimal myEncryptedNumber = decimalEncryptor.encrypt(myNumber);
...
BigDecimal plainNumber = decimalEncryptor.decrypt(myEncryptedNumber);
org.jasypt.util.numeric.StrongDecimalNumberEncryptor这允许用户使用高强度算法对BigDecimal对象进行加密和解密。(可能需要下载并安装Java加密扩展(JCE)Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files才能使用它)。为了能够加密和解密,这个加密器必须首先设置密码。
StrongDecimalNumberEncryptor decimalEncryptor = new StrongDecimalNumberEncryptor();
decimalEncryptor.setPassword(myEncryptionPassword);
...
BigDecimal myEncryptedNumber = decimalEncryptor.encrypt(myNumber);
...
BigDecimal plainNumber = decimalEncryptor.decrypt(myEncryptedNumber);
更安全:具有更安全算法的AES256DecimalNumberEncryptor util类:PBEWithHMACSHA512AndAES_256(至少需要Java 8才能使用它):
BigDecimal myNumber = ...;
...
AES256DecimalNumberEncryptor numberEncryptor = new AES256DecimalNumberEncryptor();
numberEncryptor.setPassword(myEncryptionPassword);
...
BigDecimal myEncryptedNumber = numberEncryptor.encrypt(myNumber);
...
BigDecimal plainNumber = numberEncryptor.decrypt(myEncryptedNumber);
二进制加密
这里的所有类都实现了org.asypt.util.binary.BinaryEncryptor
接口,因此如果需要,它们可以互换使用。
org.jasypt.util.binary.BasicBinaryEncryptor这允许用户使用普通强度算法对byte[]对象进行加密和解密。为了能够加密和解密,这个加密器必须首先设置密码。
BasicBinaryEncryptor binaryEncryptor = new BasicBinaryEncryptor();
binaryEncryptor.setPassword(myEncryptionPassword);
...
byte[] myEncryptedBinary = binaryEncryptor.encrypt(myBinary);
...
String plainBinary = binaryEncryptor.decrypt(myEncryptedBinary);
org.jasypt.util.binary.StrongBinaryEncryptor这允许用户使用高强度算法对byte[]对象进行加密和解密。(可能需要下载并安装Java加密扩展(JCE)Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files才能使用它)。为了能够加密和解密,这个加密器必须首先设置密码。
StrongBinaryEncryptor binaryEncryptor = new StrongBinaryEncryptor();
binaryEncryptor.setPassword(myEncryptionPassword);
...
byte[] myEncryptedBinary = binaryEncryptor.encrypt(myBinary);
...
String plainBinary = binaryEncryptor.decrypt(myEncryptedBinary);
更安全:AES256BinaryEncryptor util类具有更安全的算法:PBEWithHMACSHA512AndAES_256(您至少需要Java 8才能使用它):
AES256BinaryEncryptor binaryEncryptor = new AES256BinaryEncryptor();
binaryEncryptor.setPassword(myEncryptionPassword);
...
byte[] myEncryptedBytes = binaryEncryptor.encrypt(myBytes);
...
byte[] plainBytes = binaryEncryptor.decrypt(myEncryptedBytes);
标签:...,加密,入门,Jasypt,new,util,jasypt,org
From: https://www.cnblogs.com/shigongp/p/17452781.html