jasypt加密_「Java库」如何使用优秀的加密库Jasypt来保护你的敏感信息?

news/2024/7/7 11:11:57

1 简介

今天我们介绍一个Java库-Jasypt,全称为Java Simplified Encryption,用于加密解密。它能够让开发者用花费最小的工作而把加密集成到项目中,并且不需要对加密/解密有深入的了解。

通过Maven引用jar包如下:

org.jasypt jasypt 1.9.3compile

2 简单文本加密

文本加密是加密中最经常遇到的需求,如通讯消息、交易流水、账号信息等,这些都是非常敏感的信息,许多场景下都需要加密储存,然后读取展示的时候再解密。Jasypt提供的API非常方便,设置加密的密钥后,就可以加密信息了,代码如下:

BasicTextEncryptor textEncryptor = new BasicTextEncryptor();//设置加密密钥textEncryptor.setPassword("MySalt");//加密信息String encryptedText = textEncryptor.encrypt("This is a secret message.");System.out.println("encryptedText:" + encryptedText);//解密String decryptedText = textEncryptor.decrypt(encryptedText);System.out.println("decryptedText:" + decryptedText);

代码执行的结果为:

encryptedText:S+j0ZQBxJloVi/qrEwvgnnu9tmeFMnJcmMoTY8wBhbLIdR2IFDt+Fw==decryptedText:This is a secret message.

3 单向密码加密

用户密码是极其敏感的信息,不应该把密码明文储存在数据库中。我们需要把密码明文进行加密处理后,再把密文储存在数据库中。当用户登陆时,需要进行密码校验,有两种方案:一种方案是把数据库中的密文解密成明文,再与用户输入的密码进行对比;另一种方案是把用户输入的密码进行加密,把加密后的密文与数据库的密文进行对比。

第二种方案是更合理的,一方面是因为加密比解密更容易,性能更好;另一方面是减少明文出现的次数,保证安全性。第二种方案完全不需要解密,所以我们只需要单向地密码加密便可以了。以下代码展示这种场景下的应用:

BasicPasswordEncryptor encryptor = new BasicPasswordEncryptor();//加密密码String encryptedPassword = encryptor.encryptPassword("MyPassword");//检查密码:正确System.out.println(encryptor.checkPassword("MyPassword", encryptedPassword));//检查密码:错误System.out.println(encryptor.checkPassword("myPassword", encryptedPassword));

代码执行的结果为:

truefalse

4 改变加密算法

Jasypt为我们提供的灵活的加密/解密操作,可以自定义地使用不同的算法进行加密解密。下面的代码例子展示了如何使用加密算法PBEWithMD5AndTripleDES

StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();//设置密钥encryptor.setPassword("MySalt");//设置加密算法encryptor.setAlgorithm("PBEWithMD5AndTripleDES");//加密信息String encryptedText = encryptor.encrypt("My secret message.");System.out.println("encryptedText:" + encryptedText);//解密String decryptedText = encryptor.decrypt(encryptedText);System.out.println("decryptedText:" + decryptedText);

代码执行的结果为:

encryptedText:fdNthKMZzNC5zeNO6b119njcKpqD/02EuGm2fsRs8+c=decryptedText:My secret message.

5 多线程解密

解密通常是比加密更难的过程,Jasypt提供了多线程解密操作,可以并行解密,这样可以提供更好的性能。一般建议可以设置与机器处理器核数一致的线程数进行解密。代码如下:

PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();//设置线程数为6encryptor.setPoolSize(6);//设置密钥encryptor.setPassword("MySalt");//设置算法encryptor.setAlgorithm("PBEWithMD5AndTripleDES");//加密String encryptedText = encryptor.encrypt("My secret message.");System.out.println("encryptedText:" + encryptedText);//解密String decryptedText = encryptor.decrypt(encryptedText);System.out.println("decryptedText:" + decryptedText);

代码执行结果为:

encryptedText:wuZLTiEZ52O/nD2ktecPP75LRj+1Bu3s7YyfK8XcOc0=decryptedText:My secret message.

6 总结

本文介绍了一个优秀的Java加密库Jasypt的几种操作,希望对大家在加密场景中有帮助。另外,Jasypt还能与其它框架进行整合,如SpringHibernate,以后将为大家介绍。


欢迎关注公众号<南瓜慢说>,将持续为你更新...

多读书,多分享;多写作,多整理。

2db5da2a659027f52be73627218ed522.png

http://www.niftyadmin.cn/n/3093651.html

相关文章

关系数据标准语言SQL之数据查询

数据查询是数据库的核心操作。SQL提供了SELECT语句进行数据查询&#xff0c;该语句具有灵活的使用方式和丰富的功能。 其一般格式为 select [all | distinct]<目标表达式>[,<目标表达式>]… from<表名或视图名>[,<表名或视图名>] | (select语句)(as)&l…

点到反比例函数最短距离怎么求_[中考数学]用函数的思想武装头脑!

数学中考中&#xff0c;用函数的思想去分析解决实际问题&#xff0c;是中考生最感头疼的一件事情。究其原因&#xff0c;在于学生头脑中缺乏一定的函数思维&#xff0c;往往不能把实际问题转化为函数模式&#xff0c;也不能用常见的函数去解决一些实际问题。初中数学中&#xf…

Linux 设备驱动--- 阻塞型字符设备驱动 --- O_NONBLOCK --- 非阻塞标志【转】

转自&#xff1a;http://blog.csdn.net/yikai2009/article/details/8653697 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 目录(?)[-] 阻塞阻塞操作非阻塞操作阻塞方式-read- 实现阻塞方式-write- 实现非阻塞方式的读写操作实例 --- 读阻塞的实…

【正则表达式】使用多行的正则表达式匹配多行的网页数据

2019独角兽企业重金招聘Python工程师标准>>> 对于正则表达式的语法&#xff0c;这里不做详解。只是提一下学习正则表达式时&#xff0c;只需要了解元字符表示的意义、编译函数和编译标志、re模块包含的顶级方法和matchobject的实例方法即可。 目标&#xff1a; 从指…

自动生成气泡对话框的jQuery插件CreateBubble.js

之前在写一个界面&#xff0c;想要用到气泡&#xff0c;然而一直找不到现成的有效地办法&#xff0c;是在没有办法了我只好自己写一个&#xff0c;于是就有了现在的CreateBubble.js。很简单的一个函数&#xff0c;但是非常实用。 使用方法&#xff1a; 1.HTML代码&#xff1a; …

linux 安全应用 1

Linux安全应用 &#xff08;用户 文件 sshd sudo&#xff09;selinux 数据加密 数据解密 https什么是安全&#xff1f;保护谁的安全&#xff1f; 服务器的安全怎么保护&#xff1f;物理安全&#xff08;规则制度&#xff09;本地安全 &#xff08;用户 文件&…

python递归算法的时间复杂度分析_递归算法的时间复杂度计算

【http://www.cnblogs.com/python27/archive/2011/12/09/2282486.html 谢谢】附注&#xff1a;即使递归算法的时间复杂度是O(n),但是递归算法要进行n次函数调用&#xff0c;而迭代算法则只需要进行n次迭代而已。其效率上的差异是很显著的开篇前言&#xff1a;为什么写这篇文章…

mapreduce的核心思想

2019独角兽企业重金招聘Python工程师标准>>> 设想一个海量数据场景下的wordcount需求&#xff1a; 单机版&#xff1a;内存受限&#xff0c;磁盘受限&#xff0c;运算能力受限 分布式&#xff1a; 1、文件分布式存储&#xff08;HDFS&#xff09; 2、运算逻辑需要至…