jasypt庫的使用
1.簡介
Jasypt是一個Java簡易加密庫,用於加密配置文件中的敏感信息,如數據庫密碼。jasypt庫與springboot集成,在實際開發中非常方便。
注意:
在使用jasypt-spring-boot-starter的前提下 ,所以如果引入maven之后啟動系統報錯,那么可以根據版本對應情況這個角度進行排查。
| jasypt版本 |
springboot版本 |
| 2.1.0 |
2.1.0 |
| 1.5 |
1.4.2 |
| 1.5 |
1.5.3 |
| 1.8 |
1.4.2 |
2.添加依賴
jasypt開發者開發了starter,添加jasypt-spring-boot-starter依賴就可以了。該庫中有使用到slf4j依賴,若單獨測試,需添加相應依賴,或直接添加spring-boot-starter依賴。
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency>
3.添加注解
在Application應用類上添加注解
@EnableEncryptableProperties
啟用jasypt。
4.配置使用
將加密后的配置信息使用ENC函數,添加到配置文件中,應用啟動加載配置文件時,會自動解密。
Jasypt默認使用的算法為PBEWithMD5AndDES,該算法需要一個加密密鑰,可以在應用啟動時指定。也可以直接寫入配置文件,安全性稍差。
jasypt: encryptor: password: password
5.測試示例
5.1 准備工作
添加依賴,應用類添加注解。
5.2 添加加密后的屬性配置
在配置文件中加入加密后的屬性配置信息,我們加密了字符串Password@1,使用的加密密鑰為password,添加到application.yml文件中。
jasypt: encryptor: password: password encrypted: property: ENC(uTSqb9grs1+vUv3iN8lItC0kl65lMG+8)
5.3 添加屬性解析類
添加一個類,加載配置文件中的配置信息。
@Service public class PropertyServiceForJasyptStarter { @Value("${encrypted.property}") private String property; public String getProperty() { return property; } public String getPasswordUsingEnvironment(Environment environment) { return environment.getProperty("encrypted.property"); } }
5.4 添加測試函數
@RunWith(SpringRunner.class) @SpringBootTest public class JasyptSimpleIntegrationTest { @Autowired PropertyServiceForJasyptStarter service; @Autowired Environment environment; @Test public void whenDecryptedPasswordNeeded_GetFromService() { System.out.println("service.getProperty() = " + service.getProperty()); System.out.println("service = " + service.getPasswordUsingEnvironment(environment)); } /** * 生成加密密文 * 每次加密后密文不一樣 */ @Test public void testPBECli(){ String[] args = {"input='Password@1", "password=password", "algorithm=PBEWithMD5AndDES"}; JasyptPBEStringEncryptionCLI.main(args); } }
執行結果如下:
service.getProperty() = Password@1
service = Password@1
6、加密函數
public static void main(String[] args) { // 創建加密對象,默認 PBEWithMD5AndDES BasicTextEncryptor textEncryptor = new BasicTextEncryptor(); // 加密所需的密鑰 textEncryptor.setPassword("password"); // 加密后的數據(數據庫的用戶名或密碼) String encData = textEncryptor.encrypt("Password@1"); // 解密后的數據(原數據) String decData = textEncryptor.decrypt(encData); System.out.println("encData: " + encData); System.out.println("decData: " + decData); }
輸出:
encData: uK6xyed60q9NlSBAVb0pFyxA23TYFgtQ
decData: Password@1
轉載自 https://blog.csdn.net/nalw2012/article/details/100122201
更詳細使用細節請參考:https://blog.csdn.net/u013905744/article/details/86508236
