【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

多讀書,多分享;多寫做,多整理。

相關文章
相關標籤/搜索