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还能与其它框架进行整合,如SpringHibernate,以后将为大家介绍。


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

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

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

【Java库】如何使用优秀的加密库Jasypt来保护你的敏感信息?的更多相关文章

  1. JS 的加密库简介

    作为前端,数据提交到后台之前,重要的数据要进行加密一下,虽然已经有 https 等技术,但是增加一道前端的加密还是相对更安全的.虽然,前端的加密很容破解,但是有总比没有强. 尤其是涉及到用户名和密码, ...

  2. JS加密库

    作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主.有不正确的地方,欢迎批评指正 本文主要是参考aicoder马伦老师的博 ...

  3. java, android的aes等加密库

    https://github.com/scottyab/AESCrypt-Android https://github.com/PDDStudio/EncryptedPreferences       ...

  4. 著名加密库收集 Encrypt

    CryptoAPI 微软的CryptoAPI crypt32.lib,advapi32.lib,cryptui.lib #include <wincrypt.h>#include < ...

  5. Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库

    前面为JSTL中的常用EL函数,后面的为具体演示实例! JSTL简介: JSTL(Java Standard Tag Library) –Java标准标签库. SUN公司制定的一套标准标签库的规范. ...

  6. 分享:写了一个 java 调用 C语言 开发的动态库的范例

    分享:写了一个 java 调用 C语言 开发的动态库的范例 cfunction.h   代码#pragma once#ifdef __cplusplusextern "C" {#e ...

  7. Lo-Dash – 替代 Underscore 的优秀 JS 工具库

    前端开发人员大都喜欢 Underscore,它的工具函数很实用,用法简单.这里给大家推荐另外一个功能更全面的 JavaScript 工具——Lo-Dash,帮助你更好的开发网站和 Web 应用程序. ...

  8. JSTL标签急速秒杀jsp页面中的java代码(一)---Core标签库

    JSTL标签简介 ===================================================================== JSTL的全称是JavaServer Pa ...

  9. JQuery是继prototype之后又一个优秀的Javascript库

    JQuery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Oper ...

随机推荐

  1. 由浅入深——从ArrayList浅谈并发容器

    原创作品转载请附:https://www.cnblogs.com/superlsj/p/11655523.html 一.一个案例引发的思考 public class ArrayListTest { p ...

  2. javascript采用Broadway实现安卓视频自动播放的方法(这种坑比较多 不建议使用)

    javascript采用Broadway实现安卓视频自动播放的方法Broadway 是一个 H.264 解码器, 比jsmpge清晰度要高 使用 Emscripten 工具从 Android 的 H. ...

  3. 每天一道算法题-leetcode136-只出现一次的数字

    前言 打卡第一天 2019.10.26日打卡 算法,即解决问题的方法.同一个问题,使用不同的算法,虽然得到的结果相同,但是耗费的时间和资源是不同的.这就需要我们学习算法,找出哪个算法更好. 大家都知道 ...

  4. git回退之git reset

    参考 https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E9%87%8D%E7%BD%AE%E6%8F%AD%E5%AF%86 https: ...

  5. Zabbix-(四)邮件、钉钉告警通知

    Zabbix-(四)邮件.钉钉告警通知 一.前言 在之前的文章里,通过Zabbix对主机的磁盘.CPU以及内存进行了监控,并在首页Dashboard里创建了监控图形,但是只有当我们登录到Zabbix后 ...

  6. PHP 富文本解码为 HTML 并显示

    PHP 富文本解码为 HTML 并显示 使用  html_entity_decode 函数 参考文档 PHP实例: // html_entity_decode(待解码内容, 如何处理引号) html_ ...

  7. 领扣(LeetCode)二叉树的所有路径 个人题解

    给定一个二叉树,返回所有从根节点到叶子节点的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 输入: 1 / \ 2 3 \ 5 输出: ["1->2->5", ...

  8. useReducer代替Redux

    创建state.js import React, { createContext,useContext,useReducer } from 'react'; export const countTex ...

  9. vue实现无缝滚动

    vue实现无缝滚动 标签部分 <div style="height: 260px; width: 50%;display: inline-block;float: right; ove ...

  10. JVM 问题排查和性能优化常用的 JDK 工具

    JDK 提供了一系列用于监控.诊断 Java 进程的工具,它们在 JDK 安装目录的 bin 目录下,有 jps.jcmd.jstack.jinfo.jmap 等.其中jmc.jconsole.jvi ...