最近做東西時,用到密碼的加密存儲問題,轉一個加密工具
/* * Created on 2003-10-20 by Liudong. */ package lius.crypto.DES; import java.security.*; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; /** * 實現DES加密和解密的過程 * @author Liudong */ public class DESCipher { private final static String DES = "DES"; /** * 加密 * @param src 數據源 * @param key 密鑰,長度必須是8的倍數 * @return 返回加密後的數據 * @throws Exception */ public static byte[] encrypt(byte[] src, byte[] key) throws Exception { //DES算法要求有一個可信任的隨機數源 SecureRandom sr = new SecureRandom(); // 從原始密匙數據創建DESKeySpec對象 DESKeySpec dks = new DESKeySpec(key); // 創建一個密匙工廠,然後用它把DESKeySpec轉換成 // 一個SecretKey對象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); SecretKey securekey = keyFactory.generateSecret(dks); // Cipher對象實際完成加密操作 Cipher cipher = Cipher.getInstance(DES); // 用密匙初始化Cipher對象 cipher.init(Cipher.ENCRYPT_MODE, securekey, sr); // 現在,獲取數據並加密 // 正式執行加密操作 return cipher.doFinal(src); } /** * 解密 * @param src 數據源 * @param key 密鑰,長度必須是8的倍數 * @return 返回解密後的原始數據 * @throws Exception */ public static byte[] decrypt(byte[] src, byte[] key) throws Exception { // DES算法要求有一個可信任的隨機數源 SecureRandom sr = new SecureRandom(); // 從原始密匙數據創建一個DESKeySpec對象 DESKeySpec dks = new DESKeySpec(key); // 創建一個密匙工廠,然後用它把DESKeySpec對象轉換成 // 一個SecretKey對象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); SecretKey securekey = keyFactory.generateSecret(dks); // Cipher對象實際完成解密操作 Cipher cipher = Cipher.getInstance(DES); // 用密匙初始化Cipher對象 cipher.init(Cipher.DECRYPT_MODE, securekey, sr); // 現在,獲取數據並解密 // 正式執行解密操作 return cipher.doFinal(src); } /** * 二進制轉字符串 * @param b * @return */ private static String byte2hex(byte[] b) { String hs = ""; String stmp = ""; for (int n = 0; n < b.length; n++) { stmp = (java.lang.Integer.toHexString(b[n] & 0XFF)); if (stmp.length() == 1) hs = hs + "0" + stmp; else hs = hs + stmp; if (n < b.length - 1) hs = hs + ":"; } return hs.toUpperCase(); } /** * 測試入口 * @param args */ public static void main(String[] args) throws Exception{ byte[] key = "Hello123".getBytes(); byte[] src = "你好,中國".getBytes(); byte[] des = encrypt(src,key); System.out.println(byte2hex(des)); des = decrypt(des,key); System.out.println(byte2hex(des)); System.out.println(new String(des)); } }
1)編碼 消息長度(short int-->2個字節) + 消息編號(short int--》2個字節) + 消息體 2)Protobuf協議文檔 (1)syntax="proto3"; (2)命名格式
Ai technology 前言 AppBuilder上線了低代碼製作組件功能,可以通過工作流的方式構建自定義組件,完成簡單Agent無法完成的複雜功能,使得生成的文本更加定製化,
最近在刷一些問題的時候看到有下面一個問題 上面問的是當輸入的字符串爲什麼的時候返回 True 總結 在做題目的時候,第一次還做錯了。 這是因爲解答這個題目的時間只有 3 分鐘,沒有自己看題目 後來拿着程序跑了下。 p
Vite 預構建的核心原理 1. 兼容性與性能的雙重目標 Vite 的預構建旨在解決兩個主要問題:兼容性和性能。對於兼容性,由於 Vite 在開發階段將所有代碼視爲原生 ES 模塊,因此需要將 CommonJS 或 UMD 格式的依賴轉
自動裝配原理分析 條件註冊機制 spring-context模塊中有兩個組件:Condition接口和@Conditional註解,在@Conditional註解中可以指定一組Condition實現, 通常@Conditional是和@Co
@EnableXxx註解 Spring有很多@EnableXxx這種形式的註解,類似於可以一鍵打開某項功能,相當於暴露給用戶的一種便捷的配置API,例如 @EnableAsync 激活異步執行能力,@EnableTransactionMan
條件註冊 Spring 4.0 引入條件註冊機制,暴露給用戶的API是@Conditional和Condition接口,把@Conditional聲明在一個 @Component類上,並接受一組條件(Condition實現),容器初始化期間
本文分享自華爲雲社區《Python函數與模塊的精髓與高級特性》,作者:檸檬味擁抱。 Python 是一種功能強大的編程語言,擁有豐富的函數和模塊,使得開發者能夠輕鬆地構建複雜的應用程序。本文將介紹 Python 中函數和模塊的基本使用方法,
一.Vue文件內容 <template> </template> <script> </script> <style> </style>
第六屆·2024 MindSpore量子計算黑客松火熱進行中。本次大賽由量子信息網絡產業聯盟主辦,昇思MindSpore Quantum社區承辦,多所高校和單位聯合舉辦。開發者將全面體驗全新一代通用量子計算框架MindSpore Quant
作者:天彤 Atlassian 在 2020 年官方發佈公告,從 2021 年起停止 Jira Server 產品的銷售,並且在 2024 年徹底停止 Server 端產品的服務支持,這對於國內使用 Jira 產品的企業和研發團隊造成了不小
在SqlSugar開發框架的WPF應用中,有時候需要在按鈕或者其他界面元素上使用一些圖標,框架中我們可以使用 lepoco/wpfui 項目的圖標庫,也可以使用Font-Awesome-WPF 圖標庫,另外如果喜歡阿里矢量圖標庫的,也可以通
前端面試題 - NodeJS能用ES6模塊嗎?CommonJS 和 ES6模塊的區別是什麼? JS能寫前端web,也能寫NodeJS。 Node.js 後端應用由模塊組成,其模塊系統採用 CommonJS 規範,它並不是 JavaScri
Xmake 是一個基於 Lua 的輕量級跨平臺構建工具。 它非常的輕量,沒有任何依賴,因爲它內置了 Lua 運行時。 它使用 xmake.lua 維護項目構建,相比 makefile/CMakeLists.txt,配置語法更加簡潔直觀,
現狀分析: 首屏速度是用戶體驗的最關鍵一環,而首屏速度最大的決定性因素就是資源的加載速度,資源加載速度等於資源大小 + 網速,老的前端項目隨着不斷增長,代碼可能會變得混亂,冗餘難以理解,不斷的做加法,久而久之,前端性能上就會受到影響,