欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

实战SSM_O2O商铺_44【DES加密】 关键配置信息进行DES加密

发布时间:2025/3/21 编程问答 60 豆豆
生活随笔 收集整理的这篇文章主要介绍了 实战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加密的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。