springMVC web项目 数据库用户名密码加密解密
来源:互联网 发布:淘宝网天猫超市批发 编辑:程序博客网 时间:2024/05/18 02:25
在使用springMVC开发web项目中,数据库的用户名,密码一般都是配置在.properties文件中
然后在通过.xml配置文件引入.properties的变量,例如
在config.properties文件中,配置如下变量,变量值配置在pom.xml的profile标签下,在此就不再赘述
- jdbc.driverClassName=com.mysql.jdbc.Driver
- jdbc.url=jdbc\:mysql\://${p.jdbc.url}/${p.jdbc.dbname}?useUnicode\=true&characterEncoding\=UTF-8&zeroDateTimeBehavior\=convertToNull&rewriteBatchedStatements\=true
- jdbc.username=${p.jdbc.username}
- jdbc.password=${p.jdbc.password}
- <context:property-placeholder location="classpath:/config.properties" />
这样对于是明文的帐号,密码,是没有问题的。但是如果我在配置文件中的帐号密码是加密后的,那么如何进行使用配置呢?
解决办法:
1.首先确定加密解密算法,这种情况下,我们肯定选择是对称性加密解密算法,首选DES算法,在这里就拿他举例
2.完成加密解密算法,这个代码很简单,就不赘述,密钥自己决定,保密即可
- public class DESUtils
- {
- private static Key key;
- private static String KEY_STR="mykey";
- static{
- try
- {
- KeyGenerator generator = KeyGenerator.getInstance("DES");
- SecureRandom secureRandom=SecureRandom.getInstance("SHA1PRNG");
- secureRandom.setSeed(KEY_STR.getBytes());
- generator.init(secureRandom);
- key = generator.generateKey();
- generator=null;
- }
- catch (Exception e)
- {
- throw new RuntimeException(e);
- }
- }
- /**
- * 对字符串进行加密,返回BASE64的加密字符串
- * <功能详细描述>
- * @param str
- * @return
- * @see [类、类#方法、类#成员]
- */
- public static String getEncryptString(String str){
- BASE64Encoder base64Encoder = new BASE64Encoder();
- System.out.println(key);
- try
- {
- byte[] strBytes = str.getBytes("UTF-8");
- Cipher cipher = Cipher.getInstance("DES");
- cipher.init(Cipher.ENCRYPT_MODE, key);
- byte[] encryptStrBytes = cipher.doFinal(strBytes);
- return base64Encoder.encode(encryptStrBytes);
- }
- catch (Exception e)
- {
- throw new RuntimeException(e);
- }
- }
- /**
- * 对BASE64加密字符串进行解密
- * <功能详细描述>
- * @param str
- * @return
- * @see [类、类#方法、类#成员]
- */
- public static String getDecryptString(String str){
- BASE64Decoder base64Decoder = new BASE64Decoder();
- try
- {
- byte[] strBytes = base64Decoder.decodeBuffer(str);
- Cipher cipher = Cipher.getInstance("DES");
- cipher.init(Cipher.DECRYPT_MODE, key);
- byte[] encryptStrBytes = cipher.doFinal(strBytes);
- return new String(encryptStrBytes,"UTF-8");
- }
- catch (Exception e)
- {
- throw new RuntimeException(e);
- }
- }
- public static void main(String[] args)
- {
- String name ="root";
- String password="1234";
- String encryname = getEncryptString(name);
- String encrypassword = getEncryptString(password);
- System.out.println(encryname);
- System.out.println(encrypassword);
- System.out.println(getDecryptString(encryname));
- System.out.println(getDecryptString(encrypassword));
- }
- }
需要覆盖convertProperty方法,encryptPropNames存储的是需要解密的属性
- public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer
- {
- private String[] encryptPropNames = {"jdbc.username", "jdbc.password"};
- @Override
- protected String convertProperty(String propertyName, String propertyValue)
- {
- //如果在加密属性名单中发现该属性
- if (isEncryptProp(propertyName))
- {
- String decryptValue = DESUtils.getDecryptString(propertyValue);
- System.out.println(decryptValue);
- return decryptValue;
- }else {
- return propertyValue;
- }
- }
- private boolean isEncryptProp(String propertyName)
- {
- for (String encryptName : encryptPropNames)
- {
- if (encryptName.equals(propertyName))
- {
- return true;
- }
- }
- return false;
- }
- }
- 用
- <bean class="com.cyou.web.common.EncryptPropertyPlaceholderConfigurer" p:location="classpath:/config.properties"></bean>
- 代替
- <context:property-placeholder location="classpath:/config.properties" />
0 0
- springMVC web项目 数据库用户名密码加密解密
- springMVC web项目 数据库用户名密码加密解密
- springMVC web项目 数据库用户名密码加密解密
- springMVC web项目 数据库用户名密码加密解密
- spring web项目 数据库用户名密码加密解密
- spring 数据库用户名密码加密解密
- web登录用户名密码加密
- RSA加密传输用户名密码--web
- 生产环境c3p0数据源用户名密码加密或解密
- druid数据库账号密码加密解密
- 对数据库用户名密码的加解密应用之系列
- 用户名、密码加密
- JNDI加密用户名密码
- 用户登录时的用户名密码加密解密问题和“记住密码”功能
- [走火入魔失眠夜]浅谈管理软件信息安全,用户名、密码的加密解密【附C#配套加密解密源码】
- [走火入魔失眠夜]浅谈管理软件信息安全,用户名、密码的加密解密【附C#配套加密解密源码】
- 对用户名加密和解密
- 字符串 密码加密解密
- 观察者模式
- 大数阶乘--c基础
- iOS 屏幕尺寸、分辨率、适配
- Java匿名类浅析
- JZOJ 1422. 猴子摘桃
- springMVC web项目 数据库用户名密码加密解密
- caffe源码解读
- 用JavaScript编写业务逻辑?
- UVA 11584 Partitioning by Palindromes
- 源码-印度式乘法口诀表(“双十九”)的PL/SQL实现
- LeetCode 17. Letter Combinations of a Phone Number高效解法
- ContextLoaderListener和ServletDispatcher
- 安卓时间相关的广播(Intent.ACTION_TIME_TICK)
- Qt学习之路(57): 文本文件读写