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

1 简介

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

通过Maven引用jar包如下:

org.jasypt

jasypt

1.9.3

compile

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,以后将为大家介绍。

欢迎关注公众号,将持续为你更新...

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

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

201912:

201911:

201910:

201909:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值