Java 带有Spring引导问题的JASYPT加密强密码并在应用程序中使用

Java 带有Spring引导问题的JASYPT加密强密码并在应用程序中使用,java,spring,spring-boot,encryption,jasypt,Java,Spring,Spring Boot,Encryption,Jasypt,我有一个SpringBoot项目(运行SpringBootV2.1.7.RELEASE和SpringV5.1.9.RELEASE),我正在尝试使用Jasypt(2.1.2)加密我的数据库密码 我有一个application.yml文件,用于存储我的数据库用户/密码url&ect' 带有Jasypt的pom.xml如下所示: <!--Jasypt--> <dependency> <groupId>com.github.

我有一个SpringBoot项目(运行SpringBootV2.1.7.RELEASE和SpringV5.1.9.RELEASE),我正在尝试使用Jasypt(2.1.2)加密我的数据库密码

我有一个application.yml文件,用于存储我的数据库用户/密码url&ect'

带有Jasypt的pom.xml如下所示:

 <!--Jasypt-->

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

        </dependency>
我的数据库配置类: 配置

@PropertySource("classpath:application.yml")
@PropertySource("classpath:external.properties")
//@EncryptablePropertySource("classpath:external.properties")
//@EncryptablePropertySource("classpath:application.yml")
@EnableTransactionManagement
public class DBConfiguration {

    @Value("${spring.datasource.pps-db.driver-class-name}")
    private String driver;

    @Value("${spring.datasource.pps-db.password}")
    private String password;
我已使用以下方法生成密码:

java -cp ~/.m2/repository/org/jasypt/jasypt/1.9.2/jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="Aa123456"  password=secret algorithm=PBEWithMD5AndDES

----ENVIRONMENT-----------------

Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 11.0.5+10-LTS 



----ARGUMENTS-------------------

input: Aa123456
password: secret
algorithm: PBEWithMD5AndDES

----OUTPUT----------------------

c+E+8syd2Y1Tp1oNkJ2Xqk/9Pqt9l92B
在my application.yaml中,我在数据库密码位置放置了使用Jasypt生成的密码。 ENC(“myGeneratedPassword”)

当我运行应用程序时,一切正常,密码被解密,应用程序正常工作

我的问题是,当我有一个像“A12$$T@!”这样的强密码时,我会。要加密它, 我得到:

我想这是因为“!”

我创建了一个类来使用更强的密码:

import org.jasypt.util.text.AES256TextEncryptor;

import java.security.NoSuchAlgorithmException;

    public class JasyptPasswordEcryptor {
        public static void main(String[] args) throws NoSuchAlgorithmException {

            String password = "A12$$T@@!";


            AES256TextEncryptor encryptor = new AES256TextEncryptor();

            encryptor.setPassword("secret");
            String myEncryptedText = encryptor.encrypt(password);
            System.out.println("Encrypted: "+myEncryptedText);

            String plainText = encryptor.decrypt(myEncryptedText);
            System.out.println("Decrypted: "+plainText);
        }
    }
结果是: 加密:QGPEnAN7MpkRC4opCHn8ztSMoiX8Imx0PT/HI7X6yVDtE/bIs/pTaAID76teJ6TG 已解密:A12$$T@@@

当我在我的to application.yml中应用新的加密密码时: 密码:ENC(qgpena7mpkrc4opchn8ztsmoix8imx0pt/HI7X6yVDtE/bIs/ptaid76tej6tg)

然后我尝试运行我的应用程序(mvn spring boot:run):我得到一个异常。。我不明白问题出在哪里。。(我认为这与java.security有关,,,没有AES256TextEncryptor算法或类似的东西)

我从解密过程中获得空值: 以下是堆栈跟踪:

Caused by: org.springframework.cache.Cache$ValueRetrievalException: Value for key 'spring.datasource.pps-db.password' could not be loaded using 'com.ulisesbocchio.jasyptspringboot.caching.CachingDelegateEncryptablePropertySource$$Lambda$400/0x0000000800721440@2dec0f40'
    at org.springframework.cache.concurrent.ConcurrentMapCache.lambda$get$0 (ConcurrentMapCache.java:149)
    at java.util.concurrent.ConcurrentHashMap.computeIfAbsent (ConcurrentHashMap.java:1705)
    at org.springframework.cache.concurrent.ConcurrentMapCache.get (ConcurrentMapCache.java:144)
    at com.ulisesbocchio.jasyptspringboot.caching.CachingDelegateEncryptablePropertySource.getProperty (CachingDelegateEncryptablePropertySource.java:34)
    at com.ulisesbocchio.jasyptspringboot.wrapper.EncryptableMapPropertySourceWrapper.getProperty (EncryptableMapPropertySourceWrapper.java:31)
    at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty (PropertySourcesPropertyResolver.java:85)
    at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty (PropertySourcesPropertyResolver.java:62)
    at org.springframework.core.env.AbstractEnvironment.getProperty (AbstractEnvironment.java:539)
    at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$1.getProperty (PropertySourcesPlaceholderConfigurer.java:137)
    at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$1.getProperty (PropertySourcesPlaceholderConfigurer.java:133)
    at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty (PropertySourcesPropertyResolver.java:85)
    at org.springframework.core.env.PropertySourcesPropertyResolver.getPropertyAsRawString (PropertySourcesPropertyResolver.java:74)
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue (PropertyPlaceholderHelper.java:151)
    at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders (PropertyPlaceholderHelper.java:124)
    at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders (AbstractPropertyResolver.java:237)
    at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders (AbstractPropertyResolver.java:211)
    at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0 (PropertySourcesPlaceholderConfigurer.java:175)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue (AbstractBeanFactory.java:851)
当我再次尝试mvn apring boot:run时,我得到:

  at java.lang.Thread.run (Thread.java:834)
Caused by: org.springframework.cache.Cache$ValueRetrievalException: Value for key 'spring.datasource.pps-db.password' could not be loaded using 'com.ulisesbocchio.jasyptspringboot.caching.CachingDelegateEncryptablePropertySource$$Lambda$401/0x000000080071f840@618d748'
    at org.springframework.cache.concurrent.ConcurrentMapCache.lambda$get$0 (ConcurrentMapCache.java:149)

  at java.lang.reflect.Method.invoke (Method.java:566)
    at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run (AbstractRunMojo.java:543)
    at java.lang.Thread.run (Thread.java:834)
Caused by: java.lang.IllegalStateException: either 'jasypt.encryptor.password' or one of ['jasypt.encryptor.private-key-string', 'jasypt.encryptor.private-key-location'] must be provided for Password-based or Asymmetric encryption
    at com.ulisesbocchio.jasyptspringboot.encryptor.DefaultLazyEncryptor.lambda$null$5 (DefaultLazyEncryptor.java:54)
    at java.util.Optional.orElseThrow (Optional.java:408)
    at com.ulisesbocchio.jasyptspringboot.encryptor.DefaultLazyEncryptor.lambda$createDefault$6 (DefaultLazyEncryptor.java:54)
    at java.util.Optional.orElseGet (Optional.java:369)
    at com.ulisesbocchio.jasyptspringboot.encryptor.DefaultLazyEncryptor.createDefault (DefaultLazyEncryptor.java:50)
    at com.ulisesbocchio.jasyptspringboot.encryptor.DefaultLazyEncryptor.lambda$null$2 (DefaultLazyEncryptor.java:38)
    at java.util.Optional.orElseGet (O
我希望有人能帮助我


谢谢大家,

我想和大家分享我的ipnut

尝试加密密码时,请使用以下命令:

当试图用“!”、、、、将字符串加密时,请使用“yourpassword!!!”

请使用“”而不是“”

使用1.9.3版

java-cp~/.m2/repository/org/jasypt/jasypt/1.9.3/jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input='Aa$$@123456!'密码=secret
算法=PBEWithMD5AndDES

并将此添加到您的pom中:

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

</dependency>

com.github.ulisesbocchio
jasypt弹簧启动机
2.1.2

我希望这有帮助

请在应用程序中设置属性jasypt.encryptor.bean=jasyptPasswordEcryptor.properties/application.ymlHi,您能更具体一点吗:我需要在我的yml文件中添加这一行吗?asypt.encryptor.bean=AES256ExtendCryptorh此URL将对您有所帮助,我使用自定义jasypt encrptor遵循3.3。对我来说,一切正常,如果您进一步使用Same,请告诉我。我尝试使用bean Anotion创建一个类,但不断出现错误。我可以向您发送我的类/日志吗?
  at java.lang.Thread.run (Thread.java:834)
Caused by: org.springframework.cache.Cache$ValueRetrievalException: Value for key 'spring.datasource.pps-db.password' could not be loaded using 'com.ulisesbocchio.jasyptspringboot.caching.CachingDelegateEncryptablePropertySource$$Lambda$401/0x000000080071f840@618d748'
    at org.springframework.cache.concurrent.ConcurrentMapCache.lambda$get$0 (ConcurrentMapCache.java:149)

  at java.lang.reflect.Method.invoke (Method.java:566)
    at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run (AbstractRunMojo.java:543)
    at java.lang.Thread.run (Thread.java:834)
Caused by: java.lang.IllegalStateException: either 'jasypt.encryptor.password' or one of ['jasypt.encryptor.private-key-string', 'jasypt.encryptor.private-key-location'] must be provided for Password-based or Asymmetric encryption
    at com.ulisesbocchio.jasyptspringboot.encryptor.DefaultLazyEncryptor.lambda$null$5 (DefaultLazyEncryptor.java:54)
    at java.util.Optional.orElseThrow (Optional.java:408)
    at com.ulisesbocchio.jasyptspringboot.encryptor.DefaultLazyEncryptor.lambda$createDefault$6 (DefaultLazyEncryptor.java:54)
    at java.util.Optional.orElseGet (Optional.java:369)
    at com.ulisesbocchio.jasyptspringboot.encryptor.DefaultLazyEncryptor.createDefault (DefaultLazyEncryptor.java:50)
    at com.ulisesbocchio.jasyptspringboot.encryptor.DefaultLazyEncryptor.lambda$null$2 (DefaultLazyEncryptor.java:38)
    at java.util.Optional.orElseGet (O
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.2</version>

</dependency>