最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一個Java配置文件加密解密工具類分享

 更新時間:2014年04月17日 10:45:54   作者:  
在 JavaEE 配置文件中,例如 XML 或者 properties 文件,由于某些敏感信息不希望普通人員看見,則可以采用加密的方式存儲,程序讀取后進行解密

常見的如: 數(shù)據(jù)庫用戶密碼,短信平臺用戶密碼,系統(tǒng)間校驗的固定密碼等。
本工具類參考了 《Spring.3.x企業(yè)應(yīng)用開發(fā)實戰(zhàn)》一書 5.3節(jié)的實現(xiàn)。
完整代碼與注釋信息如下:

復(fù)制代碼 代碼如下:

package com.cncounter.util.comm;

import java.security.Key;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class DESUtils {

 // 密鑰
 private static Key key;
 // KEY種子
 private static String KEY_STR = "encrypt@cncounter.com";
 // 常量
 public static final String UTF_8 = "UTF-8";
 public static final String DES = "DES";

 // 靜態(tài)初始化
 static{
  try {
   // KEY 生成器
   KeyGenerator generator = KeyGenerator.getInstance(DES);
   // 初始化,安全隨機算子
   generator.init(new SecureRandom( KEY_STR.getBytes(UTF_8) ));
   // 生成密鑰
   key = generator.generateKey();
   generator = null;
  } catch (Exception e) {
   throw new RuntimeException(e);
  }
 }

 /**
  * 對源字符串加密,返回 BASE64編碼后的加密字符串
  * @param source 源字符串,明文
  * @return 密文字符串
  */
 public static String encode(String source){
  try {
   // 根據(jù)編碼格式獲取字節(jié)數(shù)組
   byte[] sourceBytes = source.getBytes(UTF_8);
   // DES 加密模式
   Cipher cipher = Cipher.getInstance(DES);
   cipher.init(Cipher.ENCRYPT_MODE, key);
   // 加密后的字節(jié)數(shù)組
   byte[] encryptSourceBytes = cipher.doFinal(sourceBytes);
   // Base64編碼器
   BASE64Encoder base64Encoder = new BASE64Encoder();
   return base64Encoder.encode(encryptSourceBytes);
  } catch (Exception e) {
   // throw 也算是一種 return 路徑
   throw new RuntimeException(e);
  }
 }

 /**
  * 對本工具類 encode() 方法加密后的字符串進行解碼/解密
  * @param encrypted 被加密過的字符串,即密文
  * @return 明文字符串
  */
 public static String decode(String encrypted){
  // Base64解碼器
  BASE64Decoder base64Decoder = new BASE64Decoder();
  try {
   // 先進行base64解碼
   byte[] cryptedBytes = base64Decoder.decodeBuffer(encrypted);
   // DES 解密模式
   Cipher cipher = Cipher.getInstance(DES);
   cipher.init(Cipher.DECRYPT_MODE, key);
   // 解碼后的字節(jié)數(shù)組
   byte[] decryptStrBytes = cipher.doFinal(cryptedBytes);
   // 采用給定編碼格式將字節(jié)數(shù)組變成字符串
   return new String(decryptStrBytes, UTF_8);
  } catch (Exception e) {
   // 這種形式確實適合處理工具類
   throw new RuntimeException(e);
  }
 }
 // 單元測試
 public static void main(String[] args) {
  // 需要加密的字符串
  String email = "renfufei@qq.com";
  // 加密
  String encrypted = DESUtils.encode(email);
  // 解密
  String decrypted = DESUtils.decode(encrypted);
  // 輸出結(jié)果;
  System.out.println("email: " + email);
  System.out.println("encrypted: " + encrypted);
  System.out.println("decrypted: " + decrypted);
  System.out.println("email.equals(decrypted): " + email.equals(decrypted));
 }
}

相關(guān)文章

  • 深入了解java Lombok的使用方法

    深入了解java Lombok的使用方法

    這篇文章主要介紹了深入了解java Lombok的使用,Lombok是一個通過注解以達到減少代碼的Java庫,如通過注解的方式減少get,set方法,構(gòu)造方法等,需要的朋友可以參考下
    2019-06-06
  • Java反射,泛型在Json中的運用

    Java反射,泛型在Json中的運用

    這篇文章主要介紹了Java反射,泛型在Json中的運用,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • SpringBoot整合SSO(single sign on)單點登錄

    SpringBoot整合SSO(single sign on)單點登錄

    這篇文章主要介紹了SpringBoot整合SSO(single sign on)單點登錄,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 深入解析Java的Servlet過濾器的原理及其應(yīng)用

    深入解析Java的Servlet過濾器的原理及其應(yīng)用

    這篇文章主要介紹了深入解析Java的Servlet過濾器的原理及應(yīng)用,Java編寫的Servlet通常是一個與網(wǎng)頁一起作用于瀏覽器客戶端的程序,需要的朋友可以參考下
    2016-01-01
  • jackson 如何將實體轉(zhuǎn)json json字符串轉(zhuǎn)實體

    jackson 如何將實體轉(zhuǎn)json json字符串轉(zhuǎn)實體

    這篇文章主要介紹了jackson 實現(xiàn)將實體轉(zhuǎn)json json字符串轉(zhuǎn)實體,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 關(guān)于Java Guava ImmutableMap不可變集合源碼分析

    關(guān)于Java Guava ImmutableMap不可變集合源碼分析

    這篇文章主要介紹Java Guava不可變集合ImmutableMap的源碼分析的相關(guān)資料,需要的朋友可以參考下面具體的文章內(nèi)容
    2021-09-09
  • 初識MyBatis及基本配置和執(zhí)行

    初識MyBatis及基本配置和執(zhí)行

    這篇文章主要介紹了初識MyBatis的基本知識,文中給大家提到了mybatis基本配置和執(zhí)行過程,需要的朋友可以參考下
    2017-11-11
  • 如何利用Retrofit+RxJava實現(xiàn)網(wǎng)絡(luò)請求的異常處理

    如何利用Retrofit+RxJava實現(xiàn)網(wǎng)絡(luò)請求的異常處理

    這篇文章主要介紹了如何利用Retrofit+RxJava實現(xiàn)網(wǎng)絡(luò)請求的異常處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • SpringBoot整合高德地圖天氣查詢的全過程

    SpringBoot整合高德地圖天氣查詢的全過程

    這篇文章主要給大家介紹了關(guān)于SpringBoot整合高德地圖天氣查詢的相關(guān)資料,文中通過圖文介紹的非常詳細,對大家學(xué)習(xí)或者使用springboot具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-12-12
  • SpringBoot結(jié)合WebSocket實現(xiàn)聊天功能

    SpringBoot結(jié)合WebSocket實現(xiàn)聊天功能

    本文介紹了如何使用SpringBoot和WebSocket實現(xiàn)一個簡單的聊天功能,包括導(dǎo)入依賴、配置類、創(chuàng)建消息實體、指定ServerEndpoint、創(chuàng)建客戶端等步驟,通過具體示例,演示了如何發(fā)送個人消息和群發(fā)消息,實現(xiàn)了基本的聊天功能,適合需要在項目中實現(xiàn)實時通訊功能的開發(fā)者參考
    2024-11-11

最新評論

大埔区| 饶阳县| 肥西县| 丰县| 珲春市| 乌兰察布市| 平舆县| 宜昌市| 忻州市| 大邑县| 吉首市| 称多县| 定远县| 锡林浩特市| 小金县| 桦南县| 木兰县| 文成县| 波密县| 六枝特区| 谷城县| 偃师市| 彩票| 太白县| 宜丰县| 盐亭县| 上犹县| 静海县| 南投县| 凤凰县| 永安市| 将乐县| 惠州市| 芮城县| 夹江县| 长治县| 毕节市| 岳普湖县| 塘沽区| 安化县| 九江市|