为Hibernate配置文件加密的三套解决方案(二):
转自: http://sklst.javaeye.com/blog/284689
提要:本文将详细介绍使用
Jasypt
的加密功能为Hibernate配置文件加密
首先来了解什么是Jasypt
你可以从
SourceForge.net下载
最新的Jasypt(目前的最新版本是1.5)
另外,使用Jasypt还需要几个Jar包的支持,分别是:
commons-codec-1.1.jar 和 commons-lang-2.1.jar这在你下载Jasypt压缩包的lib目录里已经附带了,如果你是Java SE 5或更早的版本,就需要
ICU3.4.4
或更高版本的支持,这些文件都可以在Jasypt网站的
Dependencies
项下找到。
另外,我们要了解一下Jasypt的加密方式,Jasypt提供了多种的加密方式,更允许用户自己编写加密方法,或使用Java增强加密算法(譬如 TripleDES)也可添加相应的包来扩展。
这里只介绍Jasypt默认的加密方法,其他方法感兴趣的朋友可以自己去研究;
Jasypt默认使用了对称加密的方法,即加密密钥和解密密钥是相同的,流程如下
解密过程与之相反
为了得到密文,我们先要使用
Jasypt自带的工具
,在下载Jasypt压缩包的bin目录中有如下文件:
decrypt.sh
digest.bat
digest.sh
encrypt.bat
encrypt.sh
jasypt-cli-bundle.jar
README_IMPORTANT.txt
我们要用到encrypt命令来实现上面的过程加密明文,命令如下:
- encrypt input=明文(可以是密码) password=密钥
上面的明文和密钥都不要加引号,output就是需要的密文,将其记录下来
得到密文以后,工作就很简单了
首先在你的项目中添加需要的包(jasypt-1.5.jar, commons-codec-1.1.jar, commons-lang-2.1.jar, icu4j-4_0.zip)
之后修改hibernate.cfg.xml文件
- <? xml version = "1.0" encoding = "utf-8" ?>
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
- < hibernate-configuration >
- < session-factory >
- < property name = "connection.provider_class" >
- org.jasypt.hibernate.connectionprovider.EncryptedPasswordDriverManagerConnectionProvider
- </ property > <!-- 这个是添加的provider类 -->
- < property name = "connection.encryptor_registered_name" >
- configurationHibernateEncryptor
- </ property > <!-- 这里是加密密钥 -->
- < property name = "connection.url" > jdbc:mysql://localhost/reportsdb </ property >
- < property name = "connection.driver_class" > com.mysql.jdbc.Driver </ property >
- < property name = "connection.username" > reportsUser </ property >
- < property name = "connection.password" > ENC(G6N718UuyPE5bHyWKyuLQSm02auQPUtm) </ property > <!-- 这里的格式是ENC(密文) -->
- < property name = "connection.pool_size" > 12 </ property >
- < property name = "show_sql" > true </ property >
- < property name = "dialect" > org.hibernate.dialect.MySQLDialect </ property >
- <!-- Mappings etc... -->
- </ session-factory >
- </ hibernate-configuration >
上面标注的地方是必须的,其他可以按照自己的实际配置,重新编译项目,就完成了。