简 介
Jasypt是Sourceforge.net上的一个开源项目,一个Java库,可以使开发者不需太多操作就可以给Java项目添加基本加密功能,而且不需要知道加密原理。
1.该开源项目可用于加密任务与应用程序,例如加密密码、敏感信息和数据通信
2.还包括高安全性、基于标准的加密技术、可同时单向和双向加密的加密密码、文本、数字和二进制文件。
3.Jasypt还符合RSA标准的基于密码的加密,并提供了无配置加密工具以及新的、高可配置标准的加密工具。
4.加密属性文件(encryptable properties files)、Spring work集成、加密Hibernate数据源配置、新的命令行工具、URL加密的Apache wicket集成以及升级文档。
5.Jasypt也可以与Acegi Security整合也即Spring Security。Jasypt亦拥有加密应用配置的集成功能,而且提供一个开放的API从而任何一个Java Cryptography Extension都可以使用Jasypt。
组件安装
组件获取
地址:http://sourceforge.net/projects/jasypt/files/。
组件库说明
1.主要工作库:
文件 版本 描述
jasypt-1.5.jar 1.5
2.主要依赖库(这些库在使用过程中必须被引入):
文件 描述 版本 地址
commons-codec-1.1.jar http://www.jasypt.org/dependencies.html
icu4j-3.4.4.jar 如果你是Java SE 5或更早的版本,就需要ICU3.4.4或更高版本的支持, http://www.jasypt.org/dependencies.html
commons-lang-2.1.jar 2.1 http://www.jasypt.org/dependencies.html
组件使用
一. 使用jasypt-1.5加密Spring的配置文件
(1)配置环境变量:
• JASYPT_HOME=C:\Java\jasypt-1.5
• JASYPT_CLASSPATH=.;%JASYPT_HOME%\bin\jasypt-cli-bundle.jar;%JASYPT_HOME%\lib\commons-codec-1.1.jar;%JASYPT_HOME%\lib\commons-lang-2.1.jar;%JASYPT_HOME%\lib\icu4j-3.8.jar;%JASYPT_HOME%\lib\jasypt-1.5.jar
• .在 path下添加JASYPT_HOME\bin
(2)生成密文和解密:
写密文生成文件,如encrypt.bat,内容如下,会在passwd.txt生成密文:
@ECHO OFF
%JASYPT_HOME%\bin\encrypt.bat input=" E8iptsi855" password="PTSPASSWORD" verbose=false > .\passwd.txt
解密生成文件,如decrypt.bat,内容如下,会在passwd1.txt生成解密后数据:
@ECHO OFF
%JASYPT_HOME%\bin\decrypt.bat input="wASjSlTjsgYFLyVswElJ4S7yjOcGnABF" password=" PTSPASSWORD " verbose=false > .\passwd1.txt
(3)文件配置:
• db.properties :
datasource.driver=com.mysql.jdbc.Driver
datasource.url=jdbc:mysql://localhost/reportsdb
datasource.username=reportsUser
datasource.password=ENC(G6N718UuyPE5bHyWKyuLQSm02auQPUtm)
• applicationContext.xml :
第一步:定义配置环境
引入环境变量配置,其中id是引用名,class是加密框架用到的类(jasypt),第一个
配置的是加密的算法(PBEWithMD5AndDES),第二个配置的是要加密的参数(或者对象)
class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
第二步:定义Encryptor:
由上一步的环境变量配置中引入加密机,它是由jasypt加密框架提供。
class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
第三步:读取加密的属性文件
配置文件的配置,要加密的参数(或者对象)放在db.properties中。
<!――指定要已被加密的属性文件db.properties Jasypt集成了对spring的属性文件解密――>
class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer">
classpath:db.properties
<!――原Spring读取属性文件db.properties――>
<!――配置数据数――>
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
第四步:程序中使用定义好的Encryptor
注入:
…
程序中使用:
public class ResBiz implements IResBiz
{
private IResService resService;
…
private PBEStringEncryptor encryptor;
public void setEncryptor(PBEStringEncryptor encryptor)
{
this.encryptor = encryptor;
}
…
String password = String.format("ENC(%s)", encryptor.encrypt(“axxxx”));
}
二. jasypt-1.5加密hibernate数据库
(1)声明hiberante加密类型:
Jasypt使用自定义Hibernate的UserTypes提供加密您的数据,为此你需要配置类型/src/jasyptHibernateTypes.hbm.xml并增加以下配置:
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
hibernateStringEncryptor
hibernateStringEncryptor
......
在hibernante配置文件中注册上诉文件
其对应关系参考如下:
Java类型 数据库类型 Jasypt Hibernate 类型
String VARCHAR, CLOB, TEXT EncryptedStringType
byte[] VARBINARY, BLOB EncryptedBinaryType
Byte VARCHAR, CLOB, TEXT EncryptedByteAsStringType
Short VARCHAR, CLOB, TEXT EncryptedShortAsStringType
Integer VARCHAR, CLOB, TEXT EncryptedIntegerAsStringType
Long VARCHAR, CLOB, TEXT EncryptedLongAsStringType
BigInteger NUMERIC, NUMBER EncryptedBigIntegerType
BigInteger VARCHAR, CLOB, TEXT EncryptedBigIntegerAsStringType
Float VARCHAR, CLOB, TEXT EncryptedFloatAsStringType
Double VARCHAR, CLOB, TEXT EncryptedDoubleAsStringType
BigDecimal NUMERIC, NUMBER EncryptedBigDecimalType
BigDecimal VARCHAR, CLOB, TEXT EncryptedBigDecimalAsStringType
Boolean VARCHAR, CLOB, TEXT EncryptedBoleanAsStringType
Date VARCHAR, CLOB, TEXT EncryptedDateAsStringType
Calendar VARCHAR, CLOB, TEXT EncryptedCalendarAsStringType
(2)在spring中注册jasypt的bean:
请注意,我们设定延迟的lazy-init="false" ,强制这些beans加载,这些需要在服务启动时注册到加密中
(3)如果没有spring配置如下,在java中加入如下方法:
StandardPBEStringEncryptor strongEncryptor = new StandardPBEStringEncryptor();
...
HibernatePBEEncryptorRegistry registry =
HibernatePBEEncryptorRegistry.getInstance();
registry.registerPBEStringEncryptor("strongHibernateStringEncryptor", strongEncryptor);
(4)配置hibernate映射文件:
hibernate-mapping
package="com.neusoft.acorn.domain.customers.impl.entity">
column="MEMBER_NO" />
column="MEMBER_NAME" />
column="NAME_PINGYIN" />
执行hibenatre映射对象时直接进行加密解密操作,操作起来非常灵活,
注:对hibernante加密的数据表支持=查询,不支持模糊查询。
三. 为 Web 应用程序的请求提供保护
参考http://tech.ddvip.com/2008-12/1229678517101440_5.html
组件缺陷
1. 对hibernante加密的数据表支持=查询,不支持模糊查询。
性能测试
硬件:
CPU:Intel(R) Core(TM)2 Duo CPU
内存:1G
软件:
服务器:tomcat5.5
应用程序:Unieap3.2
数据库:mysql5.1.3
数据:
记录数:2104条数据
加密字段:姓名,地址,邮件,电话,个人头像,证件号码,家庭地址
加密执行时间:9.584秒
未加密执行时间:0.546秒
参考资料
1.http://www.jasypt.org官方网站