今天咱們介紹一個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>
文本加密是加密中最常常遇到的需求,如通信消息、交易流水、帳號信息等,這些都是很是敏感的信息,許多場景下都須要加密儲存,而後讀取展現的時候再解密。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.
用戶密碼是極其敏感的信息,不該該把密碼明文儲存在數據庫中。咱們須要把密碼明文進行加密處理後,再把密文儲存在數據庫中。當用戶登錄時,須要進行密碼校驗,有兩種方案:一種方案是把數據庫中的密文解密成明文,再與用戶輸入的密碼進行對比;另外一種方案是把用戶輸入的密碼進行加密,把加密後的密文與數據庫的密文進行對比。微信
第二種方案是更合理的,一方面是由於加密比解密更容易,性能更好;另外一方面是減小明文出現的次數,保證安全性。第二種方案徹底不須要解密,因此咱們只須要單向地密碼加密即可以了。如下代碼展現這種場景下的應用:多線程
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
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.
解密一般是比加密更難的過程,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.
本文介紹了一個優秀的Java加密庫Jasypt的幾種操做,但願對你們在加密場景中有幫助。另外,Jasypt還能與其它框架進行整合,如Spring和Hibernate,之後將爲你們介紹。
歡迎關注公衆號<南瓜慢說>,將持續爲你更新...
歡迎加博主微信,作一個點贊之友,哈哈...
多讀書,多分享;多寫做,多整理。