首页 > 其他分享 >Jasypt入门

Jasypt入门

时间:2023-06-02 20:33:09浏览次数:42  
标签:... 加密 入门 Jasypt new util jasypt org

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.DecimalNumberEncryptororg.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

相关文章

  • 一站式元数据治理平台——Datahub入门宝典
    随着数字化转型的工作推进,数据治理的工作已经被越来越多的公司提上了日程。作为新一代的元数据管理平台,Datahub在近一年的时间里发展迅猛,大有取代老牌元数据管理工具Atlas之势。国内Datahub的资料非常少,大部分公司想使用Datahub作为自己的元数据管理平台,但可参考的资料太少。所以整......
  • Angular Google Charts教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介GoogleCharts是一个纯粹的基于JavaScript的图表库,旨在通过添加交互式图表功能来增强Web应用程序.它支持各种图表.在Chrome,Firefox,Safari,InternetExplorer(IE)等标准浏览器中使用SVG绘制图表.在传统的IE6中,VML用于绘制图形.AngularGoogleCharts是一个基于开源角度......
  • 高级Excel功能教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介Excel是办公室自动化中非常重要的一款软件,Excel函数则是Excel中的内置函数。Excel函数共包含11类,分别是数据库函数、日期与时间函数、工程函数、财务函数、信息函数、逻辑函数、查询和引用函数、数学和三角函数、统计函数、文本函数以及用户自定义函数。熟练且高效的使用......
  • LangChain入门(三)-对超长文本进行总结
    GitHub-liaokongVFX/LangChain-Chinese-Getting-Started-Guide:LangChain的中文入门教程LangChain的中文入门教程.ContributetoliaokongVFX/LangChain-Chinese-Getting-Started-GuidedevelopmentbycreatinganaccountonGitHub.https://github.com/liaokongVFX/LangCh......
  • LangChain入门(一)访问LLM模型
    GitHub-liaokongVFX/LangChain-Chinese-Getting-Started-Guide:LangChain的中文入门教程LangChain的中文入门教程.ContributetoliaokongVFX/LangChain-Chinese-Getting-Started-GuidedevelopmentbycreatinganaccountonGitHub.https://github.com/liaokongVFX/LangCh......
  • LangChain入门(二)-通过 Google 搜索并返回答案
    GitHub-liaokongVFX/LangChain-Chinese-Getting-Started-Guide:LangChain的中文入门教程LangChain的中文入门教程.ContributetoliaokongVFX/LangChain-Chinese-Getting-Started-GuidedevelopmentbycreatinganaccountonGitHub.https://github.com/liaokongVFX/LangCh......
  • Java入门讲解之EditPlus的安装与配置
    正好在学习java,使用到EditPlus软件,跟大家分享一下editplus的安装与配置过程:也可以直接看视频安装,B站上动力节点老杜的Java17版入门教程,详细讲了关于Editplus的安装配置学习地址:https://www.bilibili.com/video/BV1ig4y1c7kPEditPlus的安装与配置为什么不建议初学者一开始就用......
  • transformers入门使用
    transformers入门使用HuggingFace是一个开源社区,它提供了先进的NLP模型,数据集,以及其他工具。模型:https://huggingface.co/models数据集:https://huggingface.co/datasets主要的模型自然回归:GPT2,Trasnformer-XL,XLNet自编码:BERT,ALBERT,ROBERTa,ELECTRASto......
  • 如何4天快速入门性能测试
    在现代软件开发中,性能测试是至关重要的步骤之一。它可以帮助我们确定系统的负载极限和稳定性,以确保应用程序和网站在高流量期间仍然能够正常运行。但是,性能测试通常需要大量的时间和资源,对于初学者而言可能会感到有些棘手。以下是4天快速入门性能测试的步骤,帮助您开始追踪应用程序......
  • Python编程入门常用代码
    这些代码片段涵盖了Python编程的一些常用方面,包括日期和时间操作、列表排序、字符串格式化、文件读写以及包和模块的使用。继续探索和学习这些概念,以及其他相关的Python特性,将使你的编程能力不断提升。1.输出语句:print("Hello,World!")#打印字符串2.变量和赋值:x=5#整数y......