【Java库】如何使用优秀的加密库Jasypt来保护你的敏感信息?
1 简介
今天我们介绍一个Java库-Jasypt,全称为Java Simplified Encryption,用于加密解密。它能够让开发者用花费最小的工作而把加密集成到项目中,并且不需要对加密/解密有深入的了解。
通过Maven引用jar包如下:
<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt</artifactId>
<version>1.9.3</version>
<scope>compile</scope>
</dependency>
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));
代码执行的结果为:
true
false
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();
//设置线程数为6
encryptor.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还能与其它框架进行整合,如Spring和Hibernate,以后将为大家介绍。
欢迎关注公众号<南瓜慢说>,将持续为你更新...

欢迎加博主微信,做一个点赞之友,哈哈...

多读书,多分享;多写作,多整理。
【Java库】如何使用优秀的加密库Jasypt来保护你的敏感信息?的更多相关文章
- JS 的加密库简介
作为前端,数据提交到后台之前,重要的数据要进行加密一下,虽然已经有 https 等技术,但是增加一道前端的加密还是相对更安全的.虽然,前端的加密很容破解,但是有总比没有强. 尤其是涉及到用户名和密码, ...
- JS加密库
作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主.有不正确的地方,欢迎批评指正 本文主要是参考aicoder马伦老师的博 ...
- java, android的aes等加密库
https://github.com/scottyab/AESCrypt-Android https://github.com/PDDStudio/EncryptedPreferences ...
- 著名加密库收集 Encrypt
CryptoAPI 微软的CryptoAPI crypt32.lib,advapi32.lib,cryptui.lib #include <wincrypt.h>#include < ...
- Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库
前面为JSTL中的常用EL函数,后面的为具体演示实例! JSTL简介: JSTL(Java Standard Tag Library) –Java标准标签库. SUN公司制定的一套标准标签库的规范. ...
- 分享:写了一个 java 调用 C语言 开发的动态库的范例
分享:写了一个 java 调用 C语言 开发的动态库的范例 cfunction.h 代码#pragma once#ifdef __cplusplusextern "C" {#e ...
- Lo-Dash – 替代 Underscore 的优秀 JS 工具库
前端开发人员大都喜欢 Underscore,它的工具函数很实用,用法简单.这里给大家推荐另外一个功能更全面的 JavaScript 工具——Lo-Dash,帮助你更好的开发网站和 Web 应用程序. ...
- JSTL标签急速秒杀jsp页面中的java代码(一)---Core标签库
JSTL标签简介 ===================================================================== JSTL的全称是JavaServer Pa ...
- JQuery是继prototype之后又一个优秀的Javascript库
JQuery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Oper ...
随机推荐
- p1156 题解(未完全解决)
题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2 \le D \le 100)D(2≤D≤100)英尺. 卡门 ...
- ftp工具无法连接到Linux服务器
ftp工具无法连接Linux服务器,文件无法上传,是因为你的ftp服务器未搭建(或未启动) 许久没有登录腾讯云,今天想用xshell的xftp工具上传文件,却突然出现连接不上. 用22端口,可以正常登 ...
- 文字转换为svg动画
将输入文本根据使用字体转化为描边动画. 详情请看git https://oubenruing.github.io/svg-text-animate/
- SQL Server 中 `JSON_MODIFY` 的使用
SQL Server 中 JSON_MODIFY 的使用 Intro SQL Server 从 2016 开始支持了一些 JSON操作,最近的项目里也是好多地方直接用字段直接存成了 JSON,需要了解 ...
- 关于swoole 定时器有时候无法清除的解决方法
关于swoole 定时器有时候无法清除的解决方法 有时候start里面写个定时器 有时候你关闭进程的时候 发现定时器还是可以进行 目前只有重启服务器才可以 清除 还有就是ps -ef | grep p ...
- javascript腾讯地图放到网页中的方法
1 输入地址获取经纬度 http://lbs.qq.com/tool/getpoint/2 修改url https://apis.map.qq.com/uri/v1/marker?marker=coo ...
- 简单的私有DockerHub搭建
Docker Hub 目前Docker官方维护了一个公共仓库https://hub.docker.com, 其中已经包括100000+个的镜像.大部分需求都可以通过在 Docker hub中直接下载镜 ...
- T-SQL Part IX, PIVOT and UNPIVOT
不同于CROSS JOIN, CROSS APPLY, OUTER APPLY,MSDN文档对PIVOT和UNPIVOT 想得重视了一点,单独做了一个页面来介绍. 简单来说,PIVOT用来把行转成列, ...
- [java] 集合的架构——1张图表示
- pat 1069 The Black Hole of Numbers(20 分)
1069 The Black Hole of Numbers(20 分) For any 4-digit integer except the ones with all the digits bei ...