java - 数据库账号的加密解密

  • 1 加密解密算法的实现 - BASE64Decoder
  • 2.数据库账号的加密
  • 3. 数据库账号的解密
  • 4. 开放的数据库用户名、密码的加密解密接口
    • 4.1 开放接口`DatabaseEnDeCryptInterface`:
    • 4.2 接口实现 - 参考

1 加密解密算法的实现 - BASE64Decoder

  在平台部署时,要求对数据库中的账号密码进行加密,并在程序读取时进行解密。这里详细描述了加密解密算法的实现及调用。
  这里我们使用的加密算法是java se环境中自带的加密算法 :

算法原理:https://blog.csdn.net/mafei852213034/article/details/53331233.


算法实现:

package com.cry;
import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/*** 对指定字符串进行加密或解密* @author rmling*/
public class EncryptAndDecryptStr {private static Key key;/*** 对指定字符串进行加密,返回加密后的字符串* @param key 加密的key* @param strMing 待加密的字符串* @return*/public static String encryptStr(String key,String strMing) {getKey(key);byte[] byteMi = null;byte[] byteMing = null;String strMi = "";BASE64Encoder base64en = new BASE64Encoder();try {byteMing = strMing.getBytes("UTF8");byteMi = encToByte(byteMing);strMi = base64en.encode(byteMi);} catch (Exception e) {e.printStackTrace();} finally {base64en = null;byteMing = null;byteMi = null;}return strMi;}/*** 对指定字符串进行解密,返回解密后的字符串* @param key 加密的key* @param strDecry 待解密的字符串* @return*/public static String decryptStr(String key,String strDecry) {getKey(key);BASE64Decoder base64De = new BASE64Decoder();byte[] byteMing = null;byte[] byteMi = null;String strMing = "";try {byteMi = base64De.decodeBuffer(strDecry);byteMing = byteToEnc(byteMi);strMing = new String(byteMing, "UTF8");} catch (Exception e) {e.printStackTrace();} finally {base64De = null;byteMing = null;byteMi = null;}return strMing;}private static void getKey(String strKey) {if(strKey == null || "".equals(strKey)){strKey = "ytxsoft";}try {KeyGenerator _generator = KeyGenerator.getInstance("DES");
//          SecureRandom 实现完全随操作系统本身的內部状态,除非调用方在调用 getInstance 方法,然后调用 setSeed 方法;该实现在 windows 上每次生成的 key 都相同,但是在 solaris 或部分 linux 系统上则不同。SecureRandom random = SecureRandom.getInstance("SHA1PRNG");random.setSeed(strKey.getBytes());_generator.init(random);key = _generator.generateKey();_generator = null;} catch (Exception e) {e.printStackTrace();}}private static byte[] encToByte(byte[] byteS) {byte[] byteFina = null;Cipher cipher;try {cipher = Cipher.getInstance("DES");cipher.init(Cipher.ENCRYPT_MODE, key);byteFina = cipher.doFinal(byteS);} catch (Exception e) {e.printStackTrace();} finally {cipher = null;}return byteFina;}private static byte[] byteToEnc(byte[] byteD) {Cipher cipher;byte[] byteFina = null;try {cipher = Cipher.getInstance("DES");cipher.init(Cipher.DECRYPT_MODE, key);byteFina = cipher.doFinal(byteD);} catch (Exception e) {e.printStackTrace();} finally {cipher = null;}return byteFina;}
}

2.数据库账号的加密

  对常见的数据库配置文件,如下:

<session-factory><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql://localhost:testDB/jbpmdb?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8</property><!--  加密前的数据库连接配置 --><property name="hibernate.connection.username">user1</property><property name="hibernate.connection.password">pass1</property></session-factory>

  通过函数调用加密算法,生成对应的用户名和密码的加密字符串,替代文件中的真实用户名和密码:

 public static void main(String[] args) {System.out.println(EncryptAndDecryptStr.encryptStr("testDB", "user1"));System.out.println(EncryptAndDecryptStr.encryptStr("testDB", "pass1"));}

结果输出:

此时,配置文件可更新为:

<session-factory><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql://localhost:testDB/jbpmdb?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8</property><!--  加密后的数据库连接配置 --><property name="hibernate.connection.username">l60UHD130pk=</property><property name="hibernate.connection.password">Sk2XHkX15CQ=</property></session-factory>

3. 数据库账号的解密

在读取数据库配置文件后,将加密的用户名和密码解密成原始配置

 public static void main(String[] args) {//加密System.out.println(EncryptAndDecryptStr.encryptStr("testDB", "user1"));System.out.println(EncryptAndDecryptStr.encryptStr("testDB", "pass1"));//解密System.out.println(EncryptAndDecryptStr.decryptStr("testDB", "l60UHD130pk="));System.out.println(EncryptAndDecryptStr.decryptStr("testDB", "Sk2XHkX15CQ="));}

结果输出:

4. 开放的数据库用户名、密码的加密解密接口

4.1 开放接口DatabaseEnDeCryptInterface:

/*** 数据库加解密的接口* @author rmling*/
public interface DatabaseEnDeCryptInterface{/**获取userName加密后的字符串*/public String getEncryptUserName(String key,String userName);/**对指定字符串进行解密,返回解密后的字符串*/public String getDecryptUserName(String key,String strDecryUserName);/**获取passward加密后的字符串*/public String getEncryptPassward(String key,String passward);/**对指定字符串进行解密,返回解密后的字符串*/public String getDecryptPassward(String key,String passward);
}

4.2 接口实现 - 参考

接口实现可根据实际情况自己实现:

private static DatabaseEnDeCryptInterface databaseInter;static{databaseInter = new DatabaseEnDeCryptInterface() {@Overridepublic String getEncryptUserName(String arg0, String arg1) {return EncryptAndDecryptStr.encryptStr(arg0, arg1);}@Overridepublic String getEncryptPassward(String arg0, String arg1) {return EncryptAndDecryptStr.encryptStr(arg0, arg1);}@Overridepublic String getDecryptUserName(String arg0, String arg1) {return EncryptAndDecryptStr.decryptStr(arg0, arg1);}@Overridepublic String getDecryptPassward(String arg0, String arg1) {return EncryptAndDecryptStr.decryptStr(arg0, arg1);}};}

1 . 源码下载链接: https://download.csdn.net/download/weixin_44462773/24395402.
2 . 下一章:jbpm - hibernate 的数据库加密解密的实现.

java - 数据库账号的加密解密相关推荐

  1. java之php、Android、JAVA、C# 3DES加密解密

    异常如下 1.javax.crypto.BadPaddingException: Given final block not properly padded 1)要确认下是否加密和解密都是使用相同的填 ...

  2. java和c 的rsa加密算法_RSA算法签名技术Java与C++统一(加密解密结果一样)

    RSA算法签名技术Java与C++统一 (加密解密结果一样) 源代码下载地址:http://www.doczj.com/doc/64f44a94a0116c175f0e484d.html/produc ...

  3. C# Java间进行RSA加密解密交互

    C# Java间进行RSA加密解密交互 原文:C# Java间进行RSA加密解密交互 这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益, ...

  4. C# Java间进行RSA加密解密交互(二)

    接着前面一篇文章C# Java间进行RSA加密解密交互,继续探讨这个问题. 在前面,虽然已经实现了C# Java间进行RSA加密解密交互,但是还是与项目中要求的有所出入.在项目中,客户端(Java)的 ...

  5. [转]JAVA与.NET DES加密解密

    [转]原文地址:http://www.cnblogs.com/prince3245/archive/2010/03/23/1692630.html JAVA与.NET DES加密解密 前几天做了个项目 ...

  6. mysql数据库表添加加密密码_数据库账号密码加密详解及实例

    数据库账号密码加密详解及实例 数据库中经常有对数据库账号密码的加密,但是碰到一个问题,在使用UserService对密码进行加密的时候,spring security 也是需要进行同步配置的,因为sp ...

  7. Java简单实现DES加密解密算法

    Java简单实现DES加密解密算法 文章目录 Java简单实现DES加密解密算法 DES算法介绍 实现相关java类 代码实现 DES算法介绍 DEC加密算法属于对称加密,即利用指定的密钥,按照密码的 ...

  8. Go Nodejs Java Aes 128 ECB加密解密结果保持一致

    在多语言的生产环境下,常常是由一种语言进行加密而由另一种语言来进行解密,因此有必要保持各种语言之间加密解密算法的一致性.下面列出了Go,Nodejs,Java 的 Aes-128-Ecb的加密解密算法 ...

  9. MySQl数据库使用AES加密解密配Java代码使用

    MySQl数据库加密解密 待加密字段varchar INSERT INTO base_info(id,school_db_host) VALUES('1111254',HEX(AES_ENCRYPT( ...

  10. SSM数据库账号密码加密

    使用SSM框架开发WEB项目时,数据库的账号密码一般会写在dbconfig.properties里,为了做到保护版权等效果,要对数据库账号密码进行加密,一共有分为三步. 一.创建DESUtil类 提供 ...

最新文章

  1. 有一说一,AI 到底会不会伤害人类?
  2. 贷还是不贷:如何用Python和机器学习帮你决策?
  3. iPhone开发环境搭建For PC
  4. 大数据分析实战-信用卡欺诈检测(三)- 模型评估
  5. 程序员的进阶课-架构师之路(6)-链表
  6. 2019年湖南-粤港澳大湾区投资贸易洽谈周4月举行
  7. 利用vs10和opencv识别图片类型身份证的号码
  8. Android 项目中丁点经验总结
  9. 前端实现PDF分页与Vue中的render函数
  10. QIIME 2教程. 01简介和安装 Introduction Install(2020.11)
  11. [USACO Section 4.4]追查坏牛奶Pollutant Control (最小割)
  12. 5G NR OFDM链路层仿真及Matlab代码实现(1):LDPC信道编译码之5G Tollbox中相关函数使用介绍
  13. 乐助手电脑版 v3.0.4.33284 官方版
  14. 内网环境下的横向移动总结
  15. Execl操作基础——自动填充空白单元格
  16. MATLAB强化学习-appdesigner使用
  17. MySQL 5.7 安装教程(全步骤、保姆级教程)
  18. linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)
  19. Qt QTcpSocket 客户端设计(自动重连、多线程处理、发送大数据包、同步方式)
  20. with check option的使用

热门文章

  1. 计算机nls数据丢失损坏无法启动,系统开机出现由于NLS数据丢失或损坏
  2. ubuntu18.10安装redshift护眼软件
  3. Go语言:运行报错cannot load ... malformed module path “...“: missing dot in first path element解决办法
  4. bc汇编指令用法_BC操作流程
  5. iOS帐号、证书之漫谈(三)—— 申请Apple ID
  6. 骑士问题-BFS求解
  7. 跑跑卡丁车手游怎么用电脑玩 跑跑卡丁车模拟器玩法教程
  8. 3D劲舞游戏 Dance Mixer 简体中文汉化版+常见问题(更新1.1补丁 汉化)
  9. PL3369C原边12W电源芯片
  10. 0 、 ‘0‘ 、 “0“ 、 ’\0’ 区别