实战SSM_O2O商铺_44【DES加密】 关键配置信息进行DES加密
生活随笔
收集整理的这篇文章主要介绍了
实战SSM_O2O商铺_44【DES加密】 关键配置信息进行DES加密
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
文章目录
- 概述
- 工程结构
- DES工具类
- 修改配置文件中的用户名和密码
- 继承PropertyPlaceholderConfigurer,重写convertProperty方法
- 配置自定义的EncryptPropertyPlaceholderConfigurer
- 测试
- Github地址
概述
为了安全,我们需要对数据库的用户名和密码进行加密。
之前的文章 Spring-使用加密的属性文件02
工程结构
DES工具类
package com.artisan.o2o.util;import java.security.Key; import java.security.SecureRandom;import javax.crypto.Cipher; import javax.crypto.KeyGenerator;import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder;/*** * * @ClassName: DESUtils* * @Description: DES是一种对称加密算法。 所谓对称加密算法就是指使用相同的密钥* * @author: Mr.Yang* * @date: 2018年8月9日 下午9:09:22*/ @SuppressWarnings("restriction") public class DESUtils {private static Key key;// 设置密钥keyprivate static String KEY_STR = "myKey";private static String CHARSETNAME = "UTF-8";private static String ALGORITHM = "DES";static {try {// 生成DES算法对象KeyGenerator generator = KeyGenerator.getInstance(ALGORITHM);// 运行SHA1安全策略SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");// 设置上密钥种子secureRandom.setSeed(KEY_STR.getBytes());// 初始化基于SHA1的算法对象generator.init(secureRandom);// 生成密钥对象key = generator.generateKey();generator = null;} catch (Exception e) {throw new RuntimeException(e);}}/*** * * @Title: getEncryptString* * @Description: 获取加密后的信息* * @param str* * @return: String*/public static String getEncryptString(String str) {// 基于BASE64编码,接收byte[]并转换为StringBASE64Encoder base64encoder = new BASE64Encoder();try {// 按UTF-8编码byte[] bytes = str.getBytes(CHARSETNAME);// 获取加密对象Cipher cipher = Cipher.getInstance(ALGORITHM);// 初始化密码信息cipher.init(Cipher.ENCRYPT_MODE, key);// 加密byte[] doFinal = cipher.doFinal(bytes);// byte[] to encode好的String并返回return base64encoder.encode(doFinal);} catch (Exception e) {throw new RuntimeException(e);}}/*** * * @Title: getDecryptString* * @Description: 获取解密之后的信息* * @param str* * @return: String*/public static String getDecryptString(String str) {// 基于BASE64编码,接收byte[]并转换为StringBASE64Decoder base64decoder = new BASE64Decoder();try {// 将字符串decode成byte[]byte[] bytes = base64decoder.decodeBuffer(str);// 获取解密对象Cipher cipher = Cipher.getInstance(ALGORITHM);// 初始化解密信息cipher.init(Cipher.DECRYPT_MODE, key);// 解密byte[] doFinal = cipher.doFinal(bytes);// 返回解密之后的信息return new String(doFinal, CHARSETNAME);} catch (Exception e) {throw new RuntimeException(e);}}// 测试public static void main(String[] args) {System.out.println(getEncryptString("root"));System.out.println(getEncryptString("root"));System.out.println(getDecryptString("WnplV/ietfQ="));System.out.println(getDecryptString("WnplV/ietfQ="));}}修改配置文件中的用户名和密码
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/o2o?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT #jdbc.username=root #jdbc.password=root jdbc.username=WnplV/ietfQ= jdbc.password=WnplV/ietfQ=继承PropertyPlaceholderConfigurer,重写convertProperty方法
package com.artisan.o2o.util;import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;/*** * * @ClassName: EncryptPropertyPlaceholderConfigurer* * @Description: 继承PropertyPlaceholderConfigurer,重写convertProperty* * @author: Mr.Yang* * @date: 2018年8月9日 下午9:20:04*/ public class EncryptPropertyPlaceholderConfigurer extendsPropertyPlaceholderConfigurer {// 需要加密的字段数组private String[] encryptPropNames = { "jdbc.username", "jdbc.password" };/*** 对关键的属性进行转换*/@Overrideprotected String convertProperty(String propertyName, String propertyValue) {if (isEncryptProp(propertyName)) {// 解密String decryptValue = DESUtils.getDecryptString(propertyValue);return decryptValue;} else {return propertyValue;}}/*** * * @Title: isEncryptProp* * @Description: 判断该属性是否加密* * @param propertyName* * @return: boolean*/private boolean isEncryptProp(String propertyName) {for (String encryptpropertyName : encryptPropNames) {if (encryptpropertyName.equals(propertyName))return true;}return false;} }配置自定义的EncryptPropertyPlaceholderConfigurer
<bean class="com.artisan.o2o.util.EncryptPropertyPlaceholderConfigurer"p:location="classpath:jdbc.properties"p:fileEncoding="utf-8"/>测试
启动测试,可以debug调测 ,能正常从数据库加载数据即可
Github地址
代码地址: https://github.com/yangshangwei/o2o
总结
以上是生活随笔为你收集整理的实战SSM_O2O商铺_44【DES加密】 关键配置信息进行DES加密的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 实战SSM_O2O商铺_43【前端展示】
- 下一篇: 实战SSM_O2O商铺_48【用户登录】