使用 Jasypt 保护数据库配置

放肆的年华 提交于 2020-02-14 07:00:15

一、概述

    Jasypt 是一个Java库,允许开发人员以很简单的方式添加基本加密功能,而无需深入研究加密原理。其具有以下特性:
    1、高安全性的,基于标准的加密技术,无论是单向和双向加密。加密密码,文本,数字,二进制文件...
    2、集成Hibernate的。
    3、可集成到Spring应用程序中,与Spring Security集成。
    4、集成的能力,用于加密的应用程序(即数据源)的配置。
    5、特定功能的高性能加密的multi-processor/multi-core系统。
    6、与任何JCE提供者使用开放的API。

    这里主要讲述与Spring应用程序集成方法。

二、操作步骤

    1、加密密码

    从 Jasypt 官网,下载压缩包,解压到本地磁盘目录。在 /jasypt-1.9.2/bin 目录下有8个文件,encrypt.sh 加密、decrypt.sh 解密。可输入该命令回车,回显命令的具体参数信息。下面演示如何加密、解密一个密码串。

    首先演示加密明文密码串为密文:

[root@oracle ~]#encrypt input=root123 password=::Lazy@8 algorithm=PBEWITHMD5ANDDES

----ENVIRONMENT-----------------

Runtime: Sun Microsystems Inc. Java HotSpot(TM) Client VM 20.6-b01



----ARGUMENTS-------------------

algorithm: PBEWITHMD5ANDDES
input: root123
password: ::Lazy@8



----OUTPUT----------------------

SPtOOLMF8Ildm8TqEaQAuA==

    其中,input参数为需要加密的密码,password参数后加密密码,algorithm参数为所用的算法,加密后的输出值为 SPtOOLMF8Ildm8TqEaQAuA==

    接下来演示解密密文为明文密码串:

[root@oracle ~]#decrypt input=SPtOOLMF8Ildm8TqEaQAuA== password=::Lazy@8 algorithm=PBEWITHMD5ANDDES

----ENVIRONMENT-----------------

Runtime: Sun Microsystems Inc. Java HotSpot(TM) Client VM 20.6-b01



----ARGUMENTS-------------------

algorithm: PBEWITHMD5ANDDES
input: SPtOOLMF8Ildm8TqEaQAuA==
password: ::Lazy@8



----OUTPUT----------------------

root123

    将上面加密的密码置换到 input 参数后面,使用 decrypt 命令,则将密文,解密为明文 root123。

    2、配置外部文件

    在 src/main/resources 目录下新建jdbc.properties 文件,内容如下:

1 ds.driverClassName=com.mysql.jdbc.Driver
2 ds.url=jdbc:mysql://10.108.1.97:3306/test?useUnicode=true&characterEncoding=UTF-8
3 ds.username=scott
4 ds.password=ENC(SPtOOLMF8Ildm8TqEaQAuA==)

    需要注意到第四行配置格式。

    3、配置环境变量

    设置环境变量 APP_ENCRYPTION_PASSWORD=::Lazy@8

    4、配置Spring

 1   <bean id="environmentStringPBEConfig" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
 2     <property name="algorithm" value="PBEWITHMD5ANDDES" />
 3     <property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" />
 4   </bean>
 5   <bean id="standardPBEStringEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
 6     <property name="config" ref="environmentStringPBEConfig" />
 7   </bean>
 8   <bean class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
 9     <constructor-arg ref="standardPBEStringEncryptor" />
10     <property name="locations">
11       <list>
12         <value>classpath:jdbc.properties</value>
13       </list>
14     </property>
15   </bean>
16 
17   <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
18     <property name="driverClassName" value="${ds.driverClassName}" />
19     <property name="url" value="${ds.url}" />
20     <property name="username" value="${ds.username}" />
21     <property name="password" value="${ds.password}" />
22   </bean>

    org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig 基于环境变量配置加密方式,指定按 PBEWITHMD5ANDDES 算法加密,机密密码来自于环境变量 APP_ENCRYPTION_PASSWORD 的值。这里,有人可能就有疑问了,按照这个方式,有加密密码,那么破解不是很容易了,因为加密密码直接暴露出来了啊。嘿嘿,需要说明的是,当应用程序启动以后,此 环境变量,可直接删除,那么就可以了。

    org.jasypt.encryption.pbe.StandardPBEStringEncryptor 标准串加密器,策略来源于 EnvironmentStringPBEConfig。

    org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer 占位符配置,指定加密器和占位符对应的配置文件。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!