搜尋
首頁Javajava教程詳解Java利用實現對稱加密(DES、3DES、AES)

有兩句話是這麼說的: 

1)演算法和資料結構就是程式設計的一個重要部分,你若失掉了演算法和資料結構,你就把一切都失去了。 

2)程式設計就是演算法和資料結構,演算法和資料結構是程式設計的靈魂。

注意,這可不是我說的,是無數程式設計師總結的,話說的很實在也很精闢,若想長久可持續發展,多研究演算法還是很有必要的,今天我給大家說說加密演算法中的對稱加密演算法,並且這裡將教導大家對稱加密演算法的程式使用。包含DES、3DES和AES三種對稱加密演算法的程式使用,乾貨滿滿。

1.對稱密碼演算法

對稱密碼演算法是當今應用範圍最廣,使用頻率最高的加密演算法。它不僅應用於軟體產業,在硬體產業同樣流行。各種基礎設施凡是涉及安全需求,都會優先考慮對稱加密演算法。

對稱密碼演算法的加密金鑰和解密金鑰相同,對於大多數對稱密碼演算法,加上解密過程互逆。

(1)加解密通訊模型

詳解Java利用實現對稱加密(DES、3DES、AES)

(2)特點:演算法公開、計算量小、加密速度快、加密效率高

(3)弱點:雙方都使用同樣弱點,安全性得金鑰不到保證

對稱密碼有流密碼和分組密碼兩種,但是現在普遍使用的是分組密碼:

(4)分組密碼工作模式

1)ECB:電子密碼本(最常用的,每次加密都產生獨立的密文分組,並且對其他的密文分組不會產生影響,也就是相同的明文加密後產生相同的密文)

2)CBC:密文連結(常用的,明文加密前需要先和前面的密文進行異或運算,也就是相同的明文加密後產生不同的密文)

除了這兩種常用的工作模式,還有:

3)CFB:密文回饋

4)OFB:輸出回饋

5)CTR:計數器

這五種工作模式主要是密碼學中演算法在進行推導演算的時候所應用到的。

6.分組密碼填充方式

1)NoPadding:無填充

2)PKCS5Padding:

3)ISO10126Padding:
DES Enc

3)ISO10126Padding:

❤加密標準)

2)3DES(Triple DES、DESede,進行了三重DES加密的演算法)

3)AES(Advanced Encryption Standard,進階資料加密標準,AES演算法可以有效抵制針對DES的攻擊演算法)
先來看看這三種演算法的簡單比較:

詳解Java利用實現對稱加密(DES、3DES、AES)

下面我們看如何使用DES / 3DES / AES 三種演算法實現對稱加密:

2.DES演算法

1.DES:資料加密標準,是對稱加密演算法領域中的典型演算法 

2.特點:密鑰偏短(56位元)、生命週期短(避免被破解) 

3.Java實作

1)產生

KeyGenerator keyGen = KeyGenerator.getInstance("DES");//密钥生成器
keyGen.init(56);//初始化密钥生成器
SecretKey secretKey = keyGen.generateKey();//生成密钥
byte[] key = secretKey.getEncoded();//密钥字节数组

   

2)加密

SecretKey secretKey = new SecretKeySpec(key, "DES");//恢复密钥
Cipher cipher = Cipher.getInstance("DES");//Cipher完成加密或解密工作类
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,加密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

   

3)解密

SecretKey secretKey = new SecretKeySpec(key, "DES");//恢复密钥
Cipher cipher = Cipher.getInstance("DES");//Cipher完成加密或解密工作类
cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//解密data
   

3)解密

KeyGenerator keyGen = KeyGenerator.getInstance("DESede");//密钥生成器
keyGen.init(168); //可指定密钥长度为112或168,默认为168
SecretKey secretKey = keyGen.generateKey();//生成密钥
byte[] key = secretKey.getEncoded();//密钥字节数组

   

3)解密

3.3DES演算法

1.3DES:將密鑰長度增加至112位或168位,透過增加迭代次數提高安全性 


2.缺點:處理速度較慢、密鑰計算時間較長、加密密鑰效率不高 

3.Java實作

1)產生金鑰

SecretKey secretKey = new SecretKeySpec(key, "DESede");//恢复密钥
Cipher cipher = Cipher.getInstance("DESede");//Cipher完成加密或解密工作类
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

   

2)3DES加密

SecretKey secretKey = new SecretKeySpec(key, "DESede");//恢复密钥
Cipher cipher = Cipher.getInstance("DESede");//Cipher完成加密或解密工作类
cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//解密data

4.AES演算法(建議使用)

1.AES:進階資料加密標準,能夠有效抵禦已知的針對DES演算法的所有攻擊 

2.特點:密鑰建立時間短、靈敏度好、記憶體需求低、安全性高


3.Java實作


1)產生金鑰

KeyGenerator keyGen = KeyGenerator.getInstance("AES");//密钥生成器
keygen.init(128); //默认128,获得无政策权限后可为192或256
SecretKey secretKey = keyGen.generateKey();//生成密钥
byte[] key = secretKey.getEncoded();//密钥字节数组

   

2)AES加密

SecretKey secretKey = new SecretKeySpec(key, "AES");//恢复密钥
Cipher cipher = Cipher.getInstance("AES");//Cipher完成加密或解密工作类
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

 方便使用,我對DES / 3DES / AES 三種演算法進行了工具類編寫,地址:下載地址 (新增DES/3DES/AES工具類)。

到此,DES / 3DES / AES 三種演算法實作 對稱加密 就說完了。希望對大家的學習有幫助,也希望大家多多支持PHP中文網。

更多詳解Java利用實現對稱加密(DES、3DES、AES)相關文章請追蹤PHP中文網!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JVM如何促進Java的'寫作一次,在任何地方運行”(WORA)功能?JVM如何促進Java的'寫作一次,在任何地方運行”(WORA)功能?May 02, 2025 am 12:25 AM

JVM通過字節碼解釋、平台無關的API和動態類加載實現Java的WORA特性:1.字節碼被解釋為機器碼,確保跨平台運行;2.標準API抽像操作系統差異;3.類在運行時動態加載,保證一致性。

Java的較新版本如何解決平台特定問題?Java的較新版本如何解決平台特定問題?May 02, 2025 am 12:18 AM

Java的最新版本通過JVM優化、標準庫改進和第三方庫支持有效解決平台特定問題。 1)JVM優化,如Java11的ZGC提升了垃圾回收性能。 2)標準庫改進,如Java9的模塊系統減少平台相關問題。 3)第三方庫提供平台優化版本,如OpenCV。

說明JVM執行的字節碼驗證的過程。說明JVM執行的字節碼驗證的過程。May 02, 2025 am 12:18 AM

JVM的字節碼驗證過程包括四個關鍵步驟:1)檢查類文件格式是否符合規範,2)驗證字節碼指令的有效性和正確性,3)進行數據流分析確保類型安全,4)平衡驗證的徹底性與性能。通過這些步驟,JVM確保只有安全、正確的字節碼被執行,從而保護程序的完整性和安全性。

平台獨立性如何簡化Java應用程序的部署?平台獨立性如何簡化Java應用程序的部署?May 02, 2025 am 12:15 AM

Java'splatFormIndepentEncealLowsApplicationStorunonAnyOperatingsystemwithajvm.1)singleCodeBase:writeandeandcompileonceforallplatforms.2)easileupdates:updatebybytecodeforsimultanane deployment.3)testOnOneOnePlatForforurouniverSalpeforuluniverSalpehavior formafforulululyiversalivernave.444.44.444

Java的平台獨立性如何隨著時間的流逝而發展?Java的平台獨立性如何隨著時間的流逝而發展?May 02, 2025 am 12:12 AM

Java的平台獨立性通過JVM、JIT編譯、標準化、泛型、lambda表達式和ProjectPanama等技術不斷增強。自1990年代以來,Java從基本的JVM演進到高性能的現代JVM,確保了代碼在不同平台的一致性和高效性。

在Java應用程序中緩解平台特定問題的策略是什麼?在Java應用程序中緩解平台特定問題的策略是什麼?May 01, 2025 am 12:20 AM

Java如何緩解平台特定的問題? Java通過JVM和標準庫來實現平台無關性。 1)使用字節碼和JVM抽像操作系統差異;2)標準庫提供跨平台API,如Paths類處理文件路徑,Charset類處理字符編碼;3)實際項目中使用配置文件和多平台測試來優化和調試。

Java的平台獨立性與微服務體系結構之間有什麼關係?Java的平台獨立性與微服務體系結構之間有什麼關係?May 01, 2025 am 12:16 AM

java'splatformentenceenhancesenhancesmicroservicesharchitecture byferingDeploymentFlexible,一致性,可伸縮性和便攜性。 1)DeploymentFlexibilityAllowsibilityAllowsOllowsOllowSorlowsOllowsOllowsOllowSeStorunonAnyPlatformwithajvM.2)penterencyCrossServAccAcrossServAcrossServiCessImplifififiesDeevelopmentandeDe

GRAALVM與Java的平台獨立目標有何關係?GRAALVM與Java的平台獨立目標有何關係?May 01, 2025 am 12:14 AM

GraalVM通過三種方式增強了Java的平台獨立性:1.跨語言互操作,允許Java與其他語言無縫互操作;2.獨立的運行時環境,通過GraalVMNativeImage將Java程序編譯成本地可執行文件;3.性能優化,Graal編譯器生成高效的機器碼,提升Java程序的性能和一致性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具