
# 配置文件加密方案
配置文件中经常会涉及一些敏感信息，例如账号密码等参数。这时需对这些敏感信息进行加密，提供信息安全性。
本章节介绍使用jasypt-spring-boot-starter组件进行加密的实践，以RBAC认证中涉及的账号名和密码作为示例。
1. 在pom文件中引入加密组件对应的依赖。
   ```
   <dependency>  
      <groupId>com.github.ulisesbocchio</groupId>  
      <artifactId>jasypt-spring-boot-starter</artifactId>  
      <version>2.1.2</version>
   </dependency>
   ```
   

2. 配置密码。
   - 可将密码直接配置在配置文件（例如：application.properties）中。这种方式不安全，不建议使用。
     ```
     jasypt.encryptor.password=******
     ```
     \*\*\*\*\*\*请填写为实际加密使用的密码。
     
   
   - 在JVM启动参数中设置密码。
     ```
     -D jasypt.encryptor.password=******
     ```
     \*\*\*\*\*\*请填写为实际加密使用的密码。
     
    

3. 实现加密方法。
   ```
   //此处设置为配置项jasypt.encryptor.password的密码
     public static String salt = "GXXX6"(用户自定义);
     //加密方法 
     public static String demoEncrypt(String value) {
         BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
         textEncryptor.setPassword(salt);
         return textEncryptor.encrypt(value); 
     }
     //测试解密是否正常 
     public static String demoDecrypt(String value) {
         BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
         textEncryptor.setPassword(salt);
         return textEncryptor.decrypt(value); 
     }
     public static void main(String[] args) {
         String username = demoEncrypt("root");
         System.out.println(username);
         System.out.println(username); 
     }
   ```
   此处使用的加密方法是jasypt默认的加密方法，用户也可以自定义扩展加解密方法，详情请参考[jasypt官方文档](https://github.com/ulisesbocchio/jasypt-spring-boot#readme)描述。
   

4. 使用加密后的配置项。
   可以采用如下两种方式：
   - 写入配置文件方式
     ```
     spring:
       cloud:
         servicecomb:
            credentials:
               account:
                  name: ENC(账号名密文) 
                  password: ENC(密码密文)
     ```
     其中，账号名密文、密码密文为[3]得到的结果。
     ![](https://support.huaweicloud.com/bestpractice-cse/public_sys-resources/note_3.0-zh-cn.png)
     这种加密方式需要使用ENC()标记，用来识别是否启用了加密。ENC()为该加密方式的特殊标记，如果没有该标记，代表使用明文。
     
   
   
   
   - 环境变量注入方式
     ```
     spring_cloud_servicecomb_credentials_account_name = ENC(账号名密文)
     spring_cloud_servicecomb_credentials_account_password = ENC(密码密文)
     ```
     其中，账号名密文、密码密文为[3]得到的结果。
     
     
 
