日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發(fā)布時間:2023/12/18 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java - 数据库账号的加密解密 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

java - 數(shù)據(jù)庫賬號的加密解密

  • 1 加密解密算法的實現(xiàn) - BASE64Decoder
  • 2.數(shù)據(jù)庫賬號的加密
  • 3. 數(shù)據(jù)庫賬號的解密
  • 4. 開放的數(shù)據(jù)庫用戶名、密碼的加密解密接口
    • 4.1 開放接口`DatabaseEnDeCryptInterface`:
    • 4.2 接口實現(xiàn) - 參考

1 加密解密算法的實現(xiàn) - BASE64Decoder

??在平臺部署時,要求對數(shù)據(jù)庫中的賬號密碼進(jìn)行加密,并在程序讀取時進(jìn)行解密。這里詳細(xì)描述了加密解密算法的實現(xiàn)及調(diào)用。
??這里我們使用的加密算法是java se環(huán)境中自帶的加密算法 :

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


算法實現(xiàn):

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; /*** 對指定字符串進(jìn)行加密或解密* @author rmling*/ public class EncryptAndDecryptStr {private static Key key;/*** 對指定字符串進(jìn)行加密,返回加密后的字符串* @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;}/*** 對指定字符串進(jìn)行解密,返回解密后的字符串* @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 實現(xiàn)完全隨操作系統(tǒng)本身的內(nèi)部狀態(tài),除非調(diào)用方在調(diào)用 getInstance 方法,然后調(diào)用 setSeed 方法;該實現(xiàn)在 windows 上每次生成的 key 都相同,但是在 solaris 或部分 linux 系統(tǒng)上則不同。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.數(shù)據(jù)庫賬號的加密

??對常見的數(shù)據(jù)庫配置文件,如下:

<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><!-- 加密前的數(shù)據(jù)庫連接配置 --><property name="hibernate.connection.username">user1</property><property name="hibernate.connection.password">pass1</property></session-factory>

??通過函數(shù)調(diào)用加密算法,生成對應(yīng)的用戶名和密碼的加密字符串,替代文件中的真實用戶名和密碼:

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

結(jié)果輸出:

此時,配置文件可更新為:

<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><!-- 加密后的數(shù)據(jù)庫連接配置 --><property name="hibernate.connection.username">l60UHD130pk=</property><property name="hibernate.connection.password">Sk2XHkX15CQ=</property></session-factory>

3. 數(shù)據(jù)庫賬號的解密

在讀取數(shù)據(jù)庫配置文件后,將加密的用戶名和密碼解密成原始配置

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="));}

結(jié)果輸出:

4. 開放的數(shù)據(jù)庫用戶名、密碼的加密解密接口

4.1 開放接口DatabaseEnDeCryptInterface:

/*** 數(shù)據(jù)庫加解密的接口* @author rmling*/ public interface DatabaseEnDeCryptInterface{/**獲取userName加密后的字符串*/public String getEncryptUserName(String key,String userName);/**對指定字符串進(jìn)行解密,返回解密后的字符串*/public String getDecryptUserName(String key,String strDecryUserName);/**獲取passward加密后的字符串*/public String getEncryptPassward(String key,String passward);/**對指定字符串進(jìn)行解密,返回解密后的字符串*/public String getDecryptPassward(String key,String passward); }

4.2 接口實現(xiàn) - 參考

接口實現(xiàn)可根據(jù)實際情況自己實現(xiàn):

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 的數(shù)據(jù)庫加密解密的實現(xiàn).

總結(jié)

以上是生活随笔為你收集整理的java - 数据库账号的加密解密的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。