做海报可以借鉴的网站,帆软社区app哪里下载,外资企业,滁州网站建设公司一、使用步骤介绍
使用Jasypt#xff08;Java Simplified Encryption#xff09;进行数据加密和解密主要涉及几个步骤#xff0c;包括引入依赖、配置加密密码、加密敏感信息、将加密信息存储到配置文件中#xff0c;以及应用程序启动时自动解密。以下是详细的使用说明Java Simplified Encryption进行数据加密和解密主要涉及几个步骤包括引入依赖、配置加密密码、加密敏感信息、将加密信息存储到配置文件中以及应用程序启动时自动解密。以下是详细的使用说明
1. 引入依赖
首先你需要在你的项目中引入Jasypt的依赖。如果你是使用Maven构建项目可以在pom.xml文件中添加如下依赖注意版本号可能随时间更新请参考最新版本
dependencygroupIdcom.github.ulisesbocchio/groupIdartifactIdjasypt-spring-boot-starter/artifactIdversion3.0.5/version
/dependency可根据需要替换成最新的版本号。
2. 配置加密密码
Jasypt需要一个密码来进行加密和解密操作。你可以通过以下几种方式配置这个密码 在配置文件中指定在你的application.properties或application.yml配置文件中添加jasypt.encryptor.password配置项并设置你的密码。例如 # application.properties
jasypt.encryptor.passwordyour_encryption_password或者在application.yml中 jasypt:encryptor:password: your_encryption_password然而将密码直接写在配置文件中可能存在安全风险。因此更推荐的做法是通过启动参数或环境变量来传递这个密码。 通过启动参数指定在启动应用程序时可以通过-Djasypt.encryptor.passwordyour_encryption_password参数来指定加密密码。 使用环境变量在某些情况下使用环境变量来存储敏感信息如加密密码可能更为安全。具体方法取决于你的应用程序部署环境。
3. 加密敏感信息
在配置加密密码后你可以使用Jasypt提供的工具或API来加密你的敏感信息。加密后的信息将以密文形式存储。 使用Jasypt CLI工具Jasypt提供了一个命令行界面CLI工具允许你在命令行中加密和解密字符串。你需要下载Jasypt的jar包并在命令行中运行相应的命令。 使用Jasypt API在你的Java应用程序中你可以通过注入StringEncryptor接口的实现类来编程方式加密和解密字符串。这通常在你的Spring Boot应用程序中通过自动装配完成。
4. 将加密信息存储到配置文件中
加密敏感信息后你需要将这些加密后的信息存储到配置文件中。在Jasypt中加密后的信息通常以ENC(...)的形式出现括号内是加密后的密文。例如
# application.properties
datasource.passwordENC(加密后的密码)5. 应用程序启动时自动解密
当你的Spring Boot应用程序启动时Jasypt会自动检测配置文件中的ENC(...)字符串并使用你配置的加密密码来解密这些字符串。解密后的明文将用于应用程序的配置中。
注意事项
安全性确保你的加密密码足够复杂且安全存储避免将密码直接写在配置文件中。版本兼容性注意你使用的Jasypt版本与其他库或框架的兼容性。算法选择Jasypt支持多种加密算法你可以根据需要在配置文件中指定加密算法。
通过以上步骤你可以在你的Spring Boot应用程序中使用Jasypt来加密和解密配置文件中的敏感信息。
二、使用示例代码
1、通过工具类生成密文
在application.properties 中增加配置或者通过-Djasypt.encryptor.password123456参数来指定加密密码
# 用于加密的密码
jasypt.encryptor.password123456使用 stringEncryptor.encrypt() 生成密文
public class JasyptSecretTest {Autowiredprivate StringEncryptor stringEncryptor;Value(${datasource.password})private String password;Testpublic void encrypt(){// 加密String encrypt stringEncryptor.encrypt(root);System.out.println(encrypt encrypt);}
}2、在application.properties 中增加配置密文
# 加密后的密文包裹在ENC() 中
datasource.passwordENC(grdksstYZMsPmwvA0ALHXpzBQN2YTyA3t4ow1PDfJzblUV0LdO8UlajWKeqUF7y)
# 用于加密的密码
jasypt.encryptor.password1234563、使用 Value() 获取明文也可以通过stringEncryptor.decrypt(encrypt)手动解密
SpringBootTest
public class JasyptSecretTest {Autowiredprivate StringEncryptor stringEncryptor;Value(${datasource.password})private String password;Testpublic void encrypt(){// 加密String encrypt stringEncryptor.encrypt(root);System.out.println(encrypt encrypt);// 解密输入获取的加密字符串进行解密String decrypt stringEncryptor.decrypt(encrypt);System.out.println(decrypt decrypt);}Testpublic void show(){System.out.println(password password);}
}原理说明
SpringBoot项目在启动过程中会自动注入beanStringEncryptor用于根据不同的加密算法初始化不同的加解密实现类通过StringEncryptorBuilder.build()初始化不同的加密算法 BeanNamePlaceholderRegistryPostProcessor Bean(name ENCRYPTOR_BEAN_NAME)
public StringEncryptor stringEncryptor(final EnvCopy envCopy,final BeanFactory bf) {final String customEncryptorBeanName envCopy.get().resolveRequiredPlaceholders(ENCRYPTOR_BEAN_PLACEHOLDER);final boolean isCustom envCopy.get().containsProperty(ENCRYPTOR_BEAN_PROPERTY);return new DefaultLazyEncryptor(envCopy.get(), customEncryptorBeanName, isCustom, bf);
}通过EncryptableMapPropertySourceWrapper重写了getProperty()方法在获取配置值的时候再做解密返回明文 DefaultPropertyResolver Override
public String resolvePropertyValue(String value) {return Optional.ofNullable(value).map(environment::resolvePlaceholders).filter(detector::isEncrypted).map(resolvedValue - {try {// 获取密文String unwrappedProperty detector.unwrapEncryptedValue(resolvedValue.trim());String resolvedProperty environment.resolvePlaceholders(unwrappedProperty);// 执行解密操作return encryptor.decrypt(resolvedProperty);} catch (EncryptionOperationNotPossibleException e) {throw new DecryptionException(Unable to decrypt property: value resolved to: resolvedValue . Decryption of Properties failed, make sure encryption/decryption passwords match, e);}}).orElse(value);
}三、Jasypt配置项
Jasypt支持多种配置参数以进行密码、Digest认证、文本和对象的加密。以下是Jasypt支持的一些常见配置参数
配置参数描述示例jasypt.encryptor.password加密器的密码用于解密属性jasypt.encryptor.passwordmySecretPasswordjasypt.encryptor.algorithm加密算法的名称jasypt.encryptor.algorithmPBEWithMD5AndDESjasypt.encryptor.keyObtentionIterations获取密钥时使用的迭代次数jasypt.encryptor.keyObtentionIterations1000jasypt.encryptor.poolSize加密池的大小如果使用了池化加密器jasypt.encryptor.poolSize1jasypt.encryptor.providerName加密提供者的名称如JCE提供者jasypt.encryptor.providerNameSunJCEjasypt.encryptor.saltGeneratorClassName盐生成器的类名jasypt.encryptor.saltGeneratorClassNameorg.jasypt.salt.RandomSaltGeneratorjasypt.encryptor.ivGeneratorClassName初始化向量生成器的类名jasypt.encryptor.ivGeneratorClassNameorg.jasypt.iv.NoIvGeneratorjasypt.encryptor.stringOutputType加密字符串的输出类型如base64jasypt.encryptor.stringOutputTypebase64jasypt.encryptor.property.prefix加密属性前缀用于识别加密属性jasypt.encryptor.property.prefixENC(jasypt.encryptor.property.suffix加密属性后缀用于识别加密属性jasypt.encryptor.property.suffix)jasypt.encryptor.proxyPropertySources是否通过代理截取属性值以进行解密jasypt.encryptor.proxyPropertySourcestrue
注意
这些参数主要用于配置Jasypt加密器StringEncryptor的行为。在实际使用中特别是生产环境中jasypt.encryptor.password等敏感信息不应该硬编码在配置文件中而是通过环境变量、命令行参数或外部配置文件等方式安全地传递。Jasypt支持多种加密算法如PBEWithMD5AndDES、PBEWithHMACSHA512ANDAES_256等具体选择哪种算法取决于安全需求和环境配置。上述表格中的示例配置参数值仅为演示用途实际使用时需要根据项目需求和安全策略进行配置。
四、支持的加密算法
Jasypt支持多种加密算法以保护敏感数据。以下是Jasypt支持的一些常见加密算法
加密算法名称描述PBEWithMD5AndDES基于密码的加密PBE使用MD5作为散列函数和DES作为加密算法。这是一种较旧的加密算法但在某些旧系统中可能仍在使用PBEWithMD5AndTripleDES与PBEWithMD5AndDES类似但使用TripleDES作为加密算法提供了更强的安全性。PBEWithHMACSHA512ANDAES_256使用HMAC-SHA-512散列函数和AES-256加密算法的组合提供了非常高的安全性。这是Jasypt较新版本中推荐的加密算法之一默认值AES高级加密标准AES是一种广泛使用的对称加密算法。Jasypt支持不同长度的AES密钥如AES-128、AES-192和AES-256RSARivest-Shamir-AdlemanRSA算法是一种非对称加密算法。它使用一对密钥公钥和私钥。公钥用于加密数据私钥用于解密数据
参考资料
https://github.com/ulisesbocchio/jasypt-spring-boot