【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還能與其它框架進行整合,如SpringHibernate,以後將爲大家介紹。

歡迎關注公衆號<南瓜慢說>,將持續爲你更新...

file

歡迎加博主微信,做一個點贊之友,哈哈...

file

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章