加密算法(一)-對稱加密(DES、AES、3DES、Blowfish、Twofish)一篇了解所有主流對稱加密,輕松上手使用。

一、對稱加密算法

????????對稱加密算法采用相同的密鑰來進行加密和解密操作。其優點是加密和解密速度快,不過密鑰的管理和分發存在一定的安全風險。

1.1、DES(已不推薦使用)

這是早期的對稱加密算法,密鑰長度為 56 位。但由于密鑰長度較短,如今已不太安全。

優點

  1. 歷史悠久,算法公開,研究較為透徹,有很多相關的實現和工具。
  2. 加密和解密速度相對較快,在早期計算機性能有限的情況下具有一定優勢。

缺點

  1. 密鑰長度較短,只有 56 位,在現代計算能力下,容易受到暴力破解攻擊。
  2. 安全性逐漸降低,目前已不推薦用于對安全性要求較高的場景。

加密

 // DES 加密public static String desEncrypt(String plainText, String key) throws Exception {DESKeySpec desKeySpec = new DESKeySpec(key.getBytes(StandardCharsets.UTF_8));SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");SecretKey secretKey = keyFactory.generateSecret(desKeySpec);Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte[] encryptedBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));return Base64.getEncoder().encodeToString(encryptedBytes);}

解密

public static String desDecrypt(String encryptedText, String key) throws Exception {DESKeySpec desKeySpec = new DESKeySpec(key.getBytes(StandardCharsets.UTF_8));SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");SecretKey secretKey = keyFactory.generateSecret(desKeySpec);Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, secretKey);byte[] decodedBytes = Base64.getDecoder().decode(encryptedText);byte[] decryptedBytes = cipher.doFinal(decodedBytes);return new String(decryptedBytes, StandardCharsets.UTF_8);}

結果

public static void main(String[] args) throws Exception {String plainText = "感謝關注,精華內容將持續更新!";String desKey = "66666666"; // DES 密鑰長度必須為 8 字節// DES 測試String desEncrypted = desEncrypt(plainText, desKey);String desDecrypted = desDecrypt(desEncrypted, desKey);System.out.println("DES 加密: " + desEncrypted);System.out.println("DES 解密: " + desDecrypted);}DES 加密: 7LqxGfmOgresnxwwXzlGBWqFt8hXuqd6E4BC0mLxaBAohvYPdvaZXSO45z9XA5GH
DES 解密: 感謝關注,精華內容將持續更新!
    • 1.2、AES

????????目前應用廣泛的對稱加密算法,支持 128 位、192 位和 256 位的密鑰長度,安全性較高,效率也不錯。

優點

1.安全性高,支持 128 位、192 位和 256 位的密鑰長度,能夠有效抵御各種已知的攻擊。

2.加密和解密速度快,性能優越,在硬件和軟件實現上都有很好的表現。

3.被廣泛應用于各種領域,成為了對稱加密算法的主流選擇。

缺點

1.對于一些對資源要求極高的小型設備,可能會有一定的性能開銷。

加密

// AES 加密public static String aesEncrypt(String plainText, String key) throws Exception {SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);byte[] encryptedBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));return Base64.getEncoder().encodeToString(encryptedBytes);}

解密

 // AES 解密public static String aesDecrypt(String encryptedText, String key) throws Exception {SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "AES");Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);byte[] decodedBytes = Base64.getDecoder().decode(encryptedText);byte[] decryptedBytes = cipher.doFinal(decodedBytes);return new String(decryptedBytes, StandardCharsets.UTF_8);}

結果

public static void main(String[] args) throws Exception {String plainText = "感謝關注,精華內容將持續更新!";String aesKey = "1234567812345678"; // AES 密鑰長度可以為 16、24 或 32 字節// AES 測試String aesEncrypted = aesEncrypt(plainText, aesKey);String aesDecrypted = aesDecrypt(aesEncrypted, aesKey);System.out.println("AES 加密: " + aesEncrypted);System.out.println("AES 解密: " + aesDecrypted);}AES 加密: PUI7SM6+J4XvSDnioVneLtQDkBXchZlIF7k9v3fqe5Nwk8Polh+pBxR5RQmbHa7v
AES 解密: 感謝關注,精華內容將持續更新!
    1. 1.3、3DES

????????它是 DES 的增強版本,通過多次使用 DES 算法來增加密鑰長度,進而提高安全性。

優點

1.在 DES 的基礎上進行了改進,通過多次使用 DES 算法,增加了密鑰長度,提高了安全性。

2.兼容性好,由于是基于 DES 算法,在一些舊系統中可以繼續使用。

缺點

1.加密和解密速度較慢,因為需要進行多次 DES 運算。

2.密鑰長度相對較長,管理和存儲成本較高。

加密

 // 3DES 加密public static String tripleDesEncrypt(String plainText, String key) throws Exception {DESedeKeySpec desEdeKeySpec = new DESedeKeySpec(key.getBytes(StandardCharsets.UTF_8));SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");SecretKey secretKey = keyFactory.generateSecret(desEdeKeySpec);Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte[] encryptedBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));return Base64.getEncoder().encodeToString(encryptedBytes);}

解密

// 3DES 解密public static String tripleDesDecrypt(String encryptedText, String key) throws Exception {DESedeKeySpec desEdeKeySpec = new DESedeKeySpec(key.getBytes(StandardCharsets.UTF_8));SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");SecretKey secretKey = keyFactory.generateSecret(desEdeKeySpec);Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, secretKey);byte[] decodedBytes = Base64.getDecoder().decode(encryptedText);byte[] decryptedBytes = cipher.doFinal(decodedBytes);return new String(decryptedBytes, StandardCharsets.UTF_8);}

結果

public static void main(String[] args) throws Exception {String plainText = "感謝關注,精華內容將持續更新!";String tripleDesKey = "0123456789abcdef01234567"; // 3DES 密鑰長度必須為 24 字節// 3DES 測試String tripleDesEncrypted = tripleDesEncrypt(plainText, tripleDesKey);String tripleDesDecrypted = tripleDesDecrypt(tripleDesEncrypted, tripleDesKey);System.out.println("3DES 加密: " + tripleDesEncrypted);System.out.println("3DES 解密: " + tripleDesDecrypted);}
    1. 1.4、Blowfish

????????這是一種可變密鑰長度的對稱分組密碼算法,密鑰長度可以從 32 位到 448 位,具有較高的加密速度和安全性,適用于對速度要求較高的場景。

優點

1.密鑰長度可變,范圍從 32 位到 448 位,可以根據不同的安全需求進行調整。

2.加密和解密速度快,尤其是在 64 位塊的加密操作上表現出色。

3.算法簡單,易于實現,沒有專利限制。

缺點

1.塊大小固定為 64 位,在處理大數據時可能效率不如其他算法。

2.應用范圍相對較窄,不如 AES 等算法普及。

加密

// Blowfish 加密public static String blowfishEncrypt(String plainText, String key) throws Exception {SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "Blowfish");Cipher cipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);byte[] encryptedBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));return Base64.getEncoder().encodeToString(encryptedBytes);}

解密

// Blowfish 解密public static String blowfishDecrypt(String encryptedText, String key) throws Exception {SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "Blowfish");Cipher cipher = Cipher.getInstance("Blowfish/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);byte[] decodedBytes = Base64.getDecoder().decode(encryptedText);byte[] decryptedBytes = cipher.doFinal(decodedBytes);return new String(decryptedBytes, StandardCharsets.UTF_8);}

結果

public static void main(String[] args) throws Exception {String plainText = "感謝關注,精華內容將持續更新!";String blowfishKey = "abcdefghijklmnop";// Blowfish 測試String blowfishEncrypted = blowfishEncrypt(plainText, blowfishKey);String blowfishDecrypted = blowfishDecrypt(blowfishEncrypted, blowfishKey);System.out.println("Blowfish 加密: " + blowfishEncrypted);System.out.println("Blowfish 解密: " + blowfishDecrypted);}Blowfish 加密: HEKXerp2DpkPIHeIIt/cPBxub0z7jWWYKxZImxB2VOfDWIrH/dHVNqSP7gyHwyiU
Blowfish 解密: 感謝關注,精華內容將持續更新!
    1. 1.5、Twofish

????????作為 Blowfish 算法的繼任者,Twofish 同樣是對稱分組加密算法。它支持 128 位、192 位和 256 位的密鑰長度,設計上考慮了安全性和性能的平衡,并且具有良好的靈活性和可擴展性。

優點

1.安全性高,設計上考慮了各種攻擊方式,具有較好的抗攻擊能力。

2.支持多種密鑰長度,包括 128 位、192 位和 256 位。

3.算法靈活性高,可擴展性好。

缺點

1.實現相對復雜,需要一定的技術成本。

2.應用不如 AES 廣泛,相關的工具和庫相對較少。

引入依賴

<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.70</version>
</dependency>

加密

// Twofish 加密(需要 Bouncy Castle 庫)public static String twofishEncrypt(String plainText, String key) throws Exception {Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "Twofish");Cipher cipher = Cipher.getInstance("Twofish/ECB/PKCS5Padding", "BC");cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);byte[] encryptedBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));return Base64.getEncoder().encodeToString(encryptedBytes);}

解密

// Twofish 解密(需要 Bouncy Castle 庫)public static String twofishDecrypt(String encryptedText, String key) throws Exception {Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "Twofish");Cipher cipher = Cipher.getInstance("Twofish/ECB/PKCS5Padding", "BC");cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);byte[] decodedBytes = Base64.getDecoder().decode(encryptedText);byte[] decryptedBytes = cipher.doFinal(decodedBytes);return new String(decryptedBytes, StandardCharsets.UTF_8);}

結果

public static void main(String[] args) throws Exception {String plainText = "感謝關注,精華內容將持續更新!";String twofishKey = "0123456789abcdef0123456789abcdef";// Twofish 測試String twofishEncrypted = twofishEncrypt(plainText, twofishKey);String twofishDecrypted = twofishDecrypt(twofishEncrypted, twofishKey);System.out.println("Twofish 加密: " + twofishEncrypted);System.out.println("Twofish 解密: " + twofishDecrypted);}Twofish 加密: Z9UhJb9JZT0++Do6zauZPwf5tOMc6gX2o4LE7pZLXcwTL4PJ6m4LGvobb9k7Uv1e
Twofish 解密: 感謝關注,精華內容將持續更新!

通過以上內容便可輕輕松松使用是對稱加密算法.是不是超級簡單.有任何問題歡迎留言哦!!!

重點!重點!重點!

遇到問題不用怕不如來我的知識庫找找看,也許有意想不到的收獲!!!

易網時代-易庫資源-易庫教程:.NET開發、Java開發、PHP開發、SqlServer技術、MySQL技術-開發資料大全-易網時代-易庫資源-易庫教程 (escdns.com)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/78249.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/78249.shtml
英文地址,請注明出處:http://en.pswp.cn/web/78249.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度優先VS廣度優先:算法選擇的核心邏輯與實戰指南

摘要 深度優先搜索&#xff08;DFS&#xff09;與廣度優先搜索&#xff08;BFS&#xff09;是圖結構遍歷與路徑分析的基礎算法&#xff0c;也是最常見的搜索框架&#xff0c;在路徑規劃、社交網絡分析、游戲AI等領域均有廣泛應用。本文從算法思想、數據結構選擇、時空復雜度和…

2025深圳杯、東三省數學建模B題數模AI全網專業性第一

為什么選擇使用我的數模AI&#xff1f; 1.輕松輔導學生 2.小白也能翻身碾壓大佬 3.突破知識壁壘&#xff0c;縮短與大佬的差距&#xff0c;打破不公平的教學資源&#xff0c;扭轉差距 4.輔助商業服務&#xff0c;成本低 5.大模型本身有一定隨機性&#xff0c;所以也不用擔心…

使用MGeo模型高精度實現文本中地址識別

一、功能與安裝 1、模型地址 模型是阿里開發的門址高精度識別模型。 https://modelscope.cn/models/iic/mgeo_geographic_elements_tagging_chinese_base/summary 注意&#xff1a;不能自己安裝包&#xff0c;沒法解決依賴問題&#xff0c;直接按照官方要求安裝下面的包&am…

【Vue】Vue與UI框架(Element Plus、Ant Design Vue、Vant)

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;Vue 文章目錄 1. Vue UI 框架概述1.1 主流Vue UI框架簡介1.2 選擇UI框架的考慮因素 2. Element Plus詳解2.1 Element Plus基礎使用2.1.1 安裝與引入2.1.2 基礎組件示例 2.2 Element Plus主題定制2.3 Element Plus的優缺點分析 3…

MLPerf基準測試工具鏈定制開發指南:構建領域特異性評估指標的實踐方法

引言&#xff1a;基準測試的領域適配困局 MLPerf作為機器學習性能評估的"黃金標準"&#xff0c;其通用基準集在實際科研中常面臨?領域適配鴻溝?&#xff1a;醫療影像任務的Dice系數缺失、NLP場景的困惑度指標偏差等問題普遍存在。本文通過逆向工程MLPerf v3.1工具…

好看的個人主頁HTML源碼分享

源碼介紹 好看的個人主頁HTML源碼分享&#xff0c;源碼由HTMLCSSJS組成&#xff0c;記事本打開源碼文件可以進行內容文字之類的修改&#xff0c;雙擊html文件可以本地運行效果 效果預覽 源碼獲取 好看的個人主頁HTML源碼分享

mac word接入deepseek

網上大多使用Windows版word來接入deepseek&#xff0c;vba文件引入mac后&#xff0c;因底層工具不同&#xff0c;難以直接運行&#xff0c;例如CreateObject("MSXML2.XMLHTTP")無法創建&#xff0c;為此寫了一版新的vba&#xff0c;基于mac底層工具來實現。 vba文件點…

React Native 入門 jsx tsx 基礎語法

React Native 入門 jsx 基礎語法 JSX 介紹 JSX (JavaScript XML) 是一種 JavaScript 的語法擴展&#xff0c;允許你在 JavaScript 文件中編寫類似 HTML 的代碼。它是 React 和 React Native 應用程序中用來描述 UI 的主要方式。 JSX 的特點 JSX 看起來像 HTML&#xff0c;但…

HDLBIT-程序(Procedures)

始終塊(組合)【Always blocks(combinational)】 答案: Always blocks (clocked) 答案&#xff1a; module top_module(input clk,input a,input b,output wire out_assign,output reg out_always_comb,output reg out_always_ff );assign out_assigna^b;always(*)beginout_a…

值此五一勞動節來臨之際,

值此五一勞動節來臨之際&#xff0c;謹向全體員工致以節日的問候與誠摯的感謝&#xff01;正是你們的敬業與奮斗&#xff0c;成就了今天的成績。愿大家節日愉快&#xff0c;闔家幸福&#xff0c;身體健康&#xff01; #北京先智先行科技有限公司 #先知AI #節日快樂

【經管數據】A股上市公司資產定價效率數據(2000-2023年)

數據簡介&#xff1a;資產定價效率是衡量市場是否能夠有效、準確地反映資產內在價值的重要指標。在理想的市場條件下&#xff0c;資產的市場價格應該與其內在價值保持一致&#xff0c;即市場定價效率達到最高。然而&#xff0c;在實際市場中&#xff0c;由于信息不對稱、交易摩…

云蝠智能大模型智能呼叫:賦能零售行業服務,助力客戶增長

在數字化浪潮席卷全球的今天&#xff0c;零售行業正面臨前所未有的變革壓力。消費者需求日益個性化、市場競爭愈發激烈&#xff0c;傳統的人工客服模式已難以滿足企業對高效觸達、精準營銷和極致體驗的需求。而云蝠智能大模型智能呼叫系統&#xff0c;憑借其突破性的AI技術和深…

IP 互聯網協議

IP&#xff08;Internet Protocol&#xff0c;互聯網協議&#xff09;是網絡通信中的核心協議之一&#xff0c;屬于網絡層協議。它的主要功能是提供數據包的尋址、路由以及傳輸。IP協議負責將數據從源主機傳輸到目標主機&#xff0c;并在網絡中進行轉發。在網絡通信中&#xff…

報文三次握手對么?(?^o^?)?

論TCP報文三次握手機制的理論完備性與工程實踐價值&#xff1a;基于網絡通信協議棧的深度剖析 在計算機網絡領域&#xff0c;傳輸控制協議&#xff08;TCP&#xff09;作為實現可靠數據傳輸的核心協議&#xff0c;其連接建立階段的三次握手機制歷來是網絡工程與協議理論研究的…

HarmonyOS NEXT第一課——HarmonyOS介紹

一、什么是HarmonyOS 萬物互聯時代應用開發的機遇、挑戰和趨勢 隨著萬物互聯時代的開啟&#xff0c;應用的設備底座將從幾十億手機擴展到數百億IoT設備。全新的全場景設備體驗&#xff0c;正深入改變消費者的使用習慣。 同時應用開發者也面臨設備底座從手機單設備到全場景多設…

25.4.30數據結構|并查集 路徑壓縮

書接上回 上一節&#xff1a;數據結構|并查集 前言 &#xff08;一&#xff09;理論理解&#xff1a; 1、在QuickUnion快速合并的過程中&#xff0c;每次都要找根ID&#xff0c;而路徑壓縮讓找根ID變得更加迅速直接。 2、路徑壓縮 針對的是findRootIndex()【查找根ID】進行的壓…

C++-Lambda表達式

目錄 1.什么是 Lambda&#xff1f; 2.例子&#xff1a;打印每個元素&#xff08;和 for_each 一起用&#xff09; 3.捕獲外部變量&#xff08;Capture&#xff09; 3.1. 捕獲值&#xff08;拷貝&#xff09;&#xff1a;[] 3.2. 捕獲引用&#xff1a;[&] 3.3. 指定捕…

每日一題洛谷P8635 [藍橋杯 2016 省 AB] 四平方和c++

P8635 [藍橋杯 2016 省 AB] 四平方和 - 洛谷 (luogu.com.cn) 直接暴力枚舉&#xff0c;不做任何優化的話最后會TLE一個&#xff0c;稍微優化一下就過了&#xff08;數據給的還是太良心了&#xff09; 優化&#xff1a;每層循環用if判斷一下&#xff0c;如果大于n就直接跳 當然…

羅技K580藍牙鍵盤連接mac pro

羅技K580藍牙鍵盤&#xff0c;滿足了我們的使用需求。最棒的是&#xff0c;它能夠同時連接兩個設備&#xff0c;通過按F11和F12鍵進行切換&#xff0c;簡直不要太方便&#xff01; 連接電腦 &#x1f4bb; USB連接 1、打開鍵盤&#xff1a;雙手按住凹槽兩邊向前推&#xff0…

C語言與指針3——基本數據類型

誤區補充 char 的 表示范圍0-127 signed char 127 unsigned char 0-255enum不常用&#xff0c;但是常見&#xff0c;這里記錄一下。 enum Day {Monday 1,//范圍是IntTuesday 2,Wednesday 3 }; enum Day d Monday; switch (d) {case Monday:{printf("%d",Monday);…