【Java库】如何使用优秀的加密库Jasypt来保护你的敏感信息?

1 简介

今天咱们介绍一个Java库-Jasypt,全称为Java Simplified Encryption,用于加密解密。它可以让开发者用花费最小的工做而把加密集成到项目中,而且不须要对加密/解密有深刻的了解。java

经过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,之后将为你们介绍。


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

file

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

file

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

相关文章
相关标签/搜索