首頁 > 軟體

詳解如何利用jasypt實現組態檔加密

2022-07-05 18:06:35

Jasypt (Java Simplified Encryption) 是一個 java 庫,它允許開發人員以最小的成本將基本的加密功能新增到專案中,而無需深入瞭解密碼學的工作原理。

引入依賴

 <dependency>
     <groupId>com.github.ulisesbocchio</groupId>
     <artifactId>jasypt-spring-boot-starter</artifactId>
     <version>3.0.4</version>
 </dependency>

生效

如果是為spring boot專案的組態檔加密,則無需額外設定,啟動類上的@SpringBootApplication自動會將其注入程式,使其生效。

作用域

指定組態檔的作用域,其他組態檔不受jasypt影響

@Configuration
@EncryptablePropertySources({
    @EncryptablePropertySource("classpath:sentinel-1.properties"),                          
    @EncryptablePropertySource("classpath:sentinel-2.properties")
    })

應用

工具類

import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;

/**
 * @author issavior
 */
public class JasyptUtil {
    /**
     * org.jasypt.encryption.StringEncryptor物件
     */
    private static StringEncryptor stringEncryptor = null;

    public static StringEncryptor getInstance(String secretKey) throws Exception {
        if (secretKey == null || secretKey.trim().equals("")) {
            System.out.println("祕鑰不能為空!");
            throw new Exception("org.jasypt.encryption.StringEncryptor祕鑰不能為空!");
        }
        if (stringEncryptor == null) {
            PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
            SimpleStringPBEConfig config = new SimpleStringPBEConfig();
            // 這個祕鑰必須是我們自己定義
            config.setPassword(secretKey);
            config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
            config.setKeyObtentionIterations("1000");
            config.setPoolSize("1");
            config.setProviderName("SunJCE");
            config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
            config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
            config.setStringOutputType("base64");
            encryptor.setConfig(config);

            stringEncryptor = encryptor;
        }
        return stringEncryptor;
    }

    public static void main(final String[] args) {

        // 祕鑰字串
        String secretKey = "123!@#";

        // 待加密的明文密碼
        String pass = "123456";
        try {
            StringEncryptor stringEncryptor = JasyptUtil.getInstance(secretKey);
            String encryptPass = stringEncryptor.encrypt(pass);
            System.out.println("【" + pass + "】被加密成【" + encryptPass + "】");

            String clearPass = stringEncryptor.decrypt(encryptPass);
            System.out.println("【" + encryptPass + "】被解密成【" + clearPass + "】");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

設定

jasypt:
  encryptor:
    password: 123!@#
my:
  # 必須用ENC()包起來,這樣jasypt才能識別出來這個密碼需要解密再傳給應用程式
  msg: ENC(PwyGulNOC9YERAC9A6zpH8Da1tn50dtgJ1XBqygkdNoBTkjmENd+F5yJJMp4sthf)

屬性一覽

進階

其內部屬性都是可以重寫的,包括ENC()等。

當然了,你的鹽和密碼一定要分開儲存,也就是說,加密後的密碼設定在組態檔中,加密的鹽可以放在啟動引數上。

到此這篇關於詳解如何利用jasypt實現組態檔加密的文章就介紹到這了,更多相關jasypt組態檔加密內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援腳


IT145.com E-mail:sddin#qq.com