最近做東西時,用到密碼的加密存儲問題,轉一個加密工具
/* * 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)命名格式
背景 v4 中使用了鏈表存儲了不同大小的內存塊的方式進行內存池的實現(參考這篇v4內存複用機制),實際測試中發現內存浪費比較嚴重,因此如何設計出使用效率高,操作簡潔的內存池就成了 v5 的一個任務。 使用 make 使用 go 原生的內存分
最近在刷一些問題的時候看到有下面一個問題 上面問的是當輸入的字符串爲什麼的時候返回 True 總結 在做題目的時候,第一次還做錯了。 這是因爲解答這個題目的時間只有 3 分鐘,沒有自己看題目 後來拿着程序跑了下。 p
簡介: 搶紅包是我們生活常用的社交功能, 這個功能最主要的特點就是用戶的併發請求高, 在系統設計上, 可以使用非常多的辦法來扛住用戶的高併發請求, 在本文中簡要介紹使用Redis緩存中間件來實現搶紅包算法, Redis是一個在內存中基
字符串是 Java 程序中最常用的數據結構之一。在 Java 中 String 類已經重載了"+",字符串可以直接使用"+"進行連接,也可以用StringBuilder/StringBuffer(StringBuilder是J2SE5 及以
Java 平臺提供了兩種類型的字符串操作方式:String 和 StringBuffer/StringBuilder,它們都可以儲存和操作字符串,區別如下: String 是隻讀字符串,也就意味着 String 引用的字符串內容是不能被改
1 枚舉好用嗎? 數據字典型字段,枚舉比Integer好: 限定值,只能賦值枚舉的那幾個實例,不能像Integer隨便輸,保存和查詢的時候特別有用 含義明確,使用時不需要去查數據字典 顯示值跟存儲值直接映射,不需要手動轉換,比如1在頁面上
本文分享自華爲雲社區《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,配置語法更加簡潔直觀,
現狀分析: 首屏速度是用戶體驗的最關鍵一環,而首屏速度最大的決定性因素就是資源的加載速度,資源加載速度等於資源大小 + 網速,老的前端項目隨着不斷增長,代碼可能會變得混亂,冗餘難以理解,不斷的做加法,久而久之,前端性能上就會受到影響,