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還能與其它框架進行整合,如Spring和Hibernate,以後將爲大家介紹。
歡迎關注公衆號<南瓜慢說>,將持續爲你更新...
歡迎加博主微信,做一個點贊之友,哈哈...
多讀書,多分享;多寫作,多整理。