Jayspt加密外部属性
来源:互联网 发布:php验证码源码 编辑:程序博客网 时间:2024/05/01 18:10
在看spring3的时候就有提到过jasypt,用来加密Jayspt不过这个项目目前没有再更新了。最近一次更新也是 25 Feb 2014,很可惜,所以我们看到在spring4 他不再支持了。
不过来看下他曾经的作用吧。
可以在官网看下和spring3的整合,连接如下
http://www.jasypt.org/springsecurity.html
本文我们以数据库的用户名和密码为例子,来讲解在APDPlat中我们如何使用开源项目Jasypt来实现加解密。
src:http://my.oschina.net/apdplat/blog/405306
首先,我们引入依赖库,使用Maven方式如下:
<
dependency
>
<
groupId
>org.jasypt</
groupId
>
<
artifactId
>jasypt</
artifactId
>
<
version
>1.5</
version
>
</
dependency
>
其次,接下来我们看看如何加密:
import
org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import
org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
/**
*把密文放到配置文件中的时候要注意:
* ENC(密文)
* @author 杨尚川
*/
public
class
ConfigEncryptUtils {
public
static
void
main(String[] args){
//加密工具
StandardPBEStringEncryptor encryptor =
new
StandardPBEStringEncryptor();
//加密配置
EnvironmentStringPBEConfig config =
new
EnvironmentStringPBEConfig();
config.setAlgorithm(
"PBEWithMD5AndDES"
);
//自己在用的时候更改此密码
config.setPassword(
"apdplat"
);
//应用配置
encryptor.setConfig(config);
String plaintext=
"root"
;
//加密
String ciphertext=encryptor.encrypt(plaintext);
System.out.println(plaintext +
" : "
+ ciphertext);
}
}
运行输出结果如下:
root : azL9Cyp9H62r3eUgZ+TESw==
再次,接下来我们看看如何解密:
import
org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import
org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
/**
*把密文放到配置文件中的时候要注意:
* ENC(密文)
* @author 杨尚川
*/
public
class
ConfigEncryptUtils {
public
static
void
main(String[] args){
//加密工具
StandardPBEStringEncryptor encryptor =
new
StandardPBEStringEncryptor();
//加密配置
EnvironmentStringPBEConfig config =
new
EnvironmentStringPBEConfig();
config.setAlgorithm(
"PBEWithMD5AndDES"
);
//自己在用的时候更改此密码
config.setPassword(
"apdplat"
);
//应用配置
encryptor.setConfig(config);
String ciphertext=
"azL9Cyp9H62r3eUgZ+TESw=="
;
//解密
String plaintext=encryptor.decrypt(ciphertext);
System.out.println(ciphertext +
" : "
+ plaintext);
}
}
运行输出结果如下:
azL9Cyp9H62r3eUgZ+TESw== : root
从上面我们可以看到,加密和解密的代码的唯一差别是encrypt和decrypt。
最后我们来看看如何和spring集成,在spring配置文件中加入如下配置,这样当spring读取到的值是加过密的值就会自动解密,那么spring是如何判断一个值是否加密过了呢?是根据特定的前缀ENC(和后缀)来判断的。
<!-- Spring属性文件解密组件 -->
<
bean
id
=
"propertyConfigurer"
class
=
"org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer"
>
<
constructor-arg
ref
=
"configurationEncryptor"
/>
<
property
name
=
"systemPropertiesModeName"
value
=
"SYSTEM_PROPERTIES_MODE_OVERRIDE"
/>
<
property
name
=
"ignoreResourceNotFound"
value
=
"true"
/>
<
property
name
=
"locations"
>
<
list
>
<
value
>classpath:/org/apdplat/config.properties</
value
>
<
value
>classpath:config.local.properties</
value
>
<
value
>classpath:/org/apdplat/db.properties</
value
>
<
value
>classpath:db.local.properties</
value
>
</
list
>
</
property
>
</
bean
>
<
bean
id
=
"configurationEncryptor"
class
=
"org.jasypt.encryption.pbe.StandardPBEStringEncryptor"
>
<
property
name
=
"config"
ref
=
"environmentVariablesConfiguration"
/>
</
bean
>
<
bean
id
=
"environmentVariablesConfiguration"
class
=
"org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig"
>
<
property
name
=
"algorithm"
value
=
"PBEWithMD5AndDES"
/>
<
property
name
=
"password"
value
=
"apdplat"
/>
</
bean
>
配置好spring后,我们就可以在指定的配置文件classpath:config.local.properties中使用加密过后的数据库连接使用的用户名和密码了,别忘了特定的前缀ENC(和后缀)哦:
#数据库配置文件
#mysql
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/${module.short.name}?useUnicode=true&characterEncoding=UTF-8&createDatabaseIfNotExist=true&autoReconnect=true
db.username=ENC(qPWWR8YEmQE63EYywEBKaQ==)
db.password=ENC(qPWWR8YEmQE63EYywEBKaQ==)
jpa.database=MYSQL
db.backup.command=mysqldump -u${db.username} -p${db.password} ${module.short.name}
db.restore.command=mysql -u${db.username} -p${db.password} ${module.short.name}
-------------------------
-------------------------
http://www.jasypt.org/springsecurity.html
- Jayspt加密外部属性
- 在Spring中如何使用加密外部属性文件
- Spring对外部属性文件指定的某个属性进行加密、解密
- Spring对外部属性文件指定的某个属性进行加密、解密
- 外部存储属性extern
- 属性文件加密
- UITextField加密输入属性
- 获取外部css属性.txt
- spring 使用外部属性文件
- 10011---使用外部属性文件
- higcharts 外部改变属性值
- 4、使用外部属性文件
- Spring 使用外部属性文件
- JFinal引入外部属性文件
- Spring_8_使用外部属性文件
- Spring使用外部属性文件
- Spring中外部属性文件
- Spring使用外部属性文件
- netty的心跳检测实现
- 实模式和保护模式区别及寻址方式
- redis使用规范
- LeetCode_DP_Word Break II
- 妈妈去世了
- Jayspt加密外部属性
- python修饰器
- MySQL 分页查询性能分析
- JavaScript中的this代表什么?
- 去掉UUID的小横线,如果你觉得不爽的话,哈哈
- JNI Helloworld
- Python Foundation - part one
- python 如何压平嵌套
- Linux(deepin)安装Oracle JDK