首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用spring 4.0的Jasypt

使用spring 4.0的Jasypt
EN

Stack Overflow用户
提问于 2015-08-27 16:38:34
回答 2查看 2.7K关注 0票数 1

我通过XML配置在我的应用程序中使用了spring安全性。

这是我的密码编码器bean

代码语言:javascript
复制
<b:bean id="passwordEncoder"
    class="org.springframework.security.crypto.password.StandardPasswordEncoder">
    <b:constructor-arg value="ThisIsASecretSoChangeMe" />
</b:bean>

我想用Jasypt加密代替它。如何集成jasypt1.9和spring security 4.0.1版本?

EN

回答 2

Stack Overflow用户

发布于 2017-03-30 04:52:12

如果您正在使用spring-boot,请在pom中使用此依赖项

代码语言:javascript
复制
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>${jasypt-spring-boot-starter.version}</version>
        </dependency>

在您的application.yml或application.properties文件中,只需将加密的密码用ENC()括起来,而不是明文密码。示例

代码语言:javascript
复制
password:
    encrypted:
        password: ENC(nZ3U2bdJ05FHp1LYQbAVvDKkVs8Pi3Ke)

jasypt:
    encryptor:
        password: IfYouAreGoodAtSomethingNeverDoItForFree  

在此之前,您需要从您的明文密码和jasypt.encryptor.password(类似于salt,在本例中为IfYouAreGoodAtSomethingNeverDoItForFree)生成此加密密码。这可以通过这样的方式来完成

代码语言:javascript
复制
java -cp ~/.m2/repository/org/jasypt/jasypt/1.9.2/jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="PasswordToBeEncrypted" password=<SecretKeyToEncryptDecrypt> algorithm=PBEWithMD5AndDES  

或者破解java代码。这是一份草稿。

代码语言:javascript
复制
public class Md5Test {
    public static void main(String[] args) throws NoSuchAlgorithmException {

        String password = "plaintextpassword";

        BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
        textEncryptor.setPassword("IfYouAreGoodAtSomethingNeverDoItForFree  ");
        String myEncryptedText = textEncryptor.encrypt(password);
        System.out.println(myEncryptedText);
        BasicTextEncryptor textDecryptor = new BasicTextEncryptor();
        textDecryptor.setPassword("IfYouAreGoodAtSomethingNeverDoItForFree  ");
        String plainText = textDecryptor.decrypt("QBPaH8HKE8JDaeIpJk66Kc8nGHtBfY+L");
        System.out.println(plainText);
    }
  }
票数 1
EN

Stack Overflow用户

发布于 2019-10-29 13:45:07

从命令生成的加密字符串不能提供所需的结果,因为它不能加密特殊的字符,如"!".and给出错误"event not found“

KAD@ashutosh MINGW64 ~/

$ java测试~/.m2/repository/org/jasypt/jasypt/1.9.3/jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=“-cp!email30#password”password="some_salt“algorithm=PBEWithMD5AndDES

bash:!email30#password:未找到事件

这是一个使用org.jasypt.util.text.AES256TextEncryptor的示例,这是一个用于轻松执行high-strength encryption of texts的实用程序类。

此类在内部保存以这种方式配置的StandardPBEStringEncryptor

PBEWithHMACSHA512AndAES_256.

  • Key #en1#迭代算法:1000.

使用它所需的步骤如下:

  1. 创建实例(使用setPasswordCharArray(char[])).
  2. Perform )。
  3. 设置密码(使用setPassword(字符串)或新建所需的加密(字符串)或解密(字符串)操作。

pom.xml:

代码语言:javascript
复制
<dependency>
        <groupId>com.github.ulisesbocchio</groupId>
        <artifactId>jasypt-spring-boot-starter</artifactId>
        <version>2.1.2</version>
    </dependency>

您可以使用jasypt最新的2.1.2(带boot2.1.1)或jasypt-1.9.3.jar

Java代码:

代码语言:javascript
复制
import org.jasypt.util.text.AES256TextEncryptor;
import java.security.NoSuchAlgorithmException;

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

    String password = "Test!email30#password";

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

    String plainText = encryptor.decrypt(myEncryptedText);
    System.out.println("Decrypted: "+plainText);
 }
}

输出:

加密的fureWQHrflMinY+KBOcNeJyYmQv+7Ung/IclGz3iSBYKqTNdgslADg+TMcfFI/unaqZ/P3kDGPco2jZ4vIhrFw==:

已解密:测试!email30#password

Spring Boot集成:

您可以在任何配置类或@SpringBootApplication中使用@EnableEncryptableProperties。请参见示例:

代码语言:javascript
复制
import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableEncryptableProperties
@SpringBootApplication
@ComponentScan(basePackages = {"com.company"})
@EntityScan(basePackages = {"com.company.persistence.entities"})
@EnableJpaRepositories(value = {"com.company.persistence.repository"})
@EnableTransactionManagement
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

和任何属性/yml文件中:

代码语言:javascript
复制
email:
    password:
        # DO-NOT-USE/REMOVE THIS
        plain: 'Test!email30#password'
        # use this encrypted one
        encrypted: ENC(fureWQHrflMinY+KBOcNeJyYmQv+7Ung/IclGz3iSBYKqTNdgslADg+TMcfFI/unaqZ/P3kDGPco2jZ4vIhrFw==)

jasypt:
    encryptor:
        password: some_salt
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32244500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档