Java中幾種常用加密算法盤點(diǎn)
常用算法
DES算法
DES(Data Encryption Standard)是一種對(duì)稱加密算法,被廣泛用于金融、通信等領(lǐng)域。
DES算法特點(diǎn)
- 對(duì)稱加密算法:加密和解密使用相同的密鑰。
- 分組加密:明文被分成64位的組,每組用相同的密鑰進(jìn)行加密。
- 密鑰長度為56位,經(jīng)過置換選擇、循環(huán)左移等操作生成16輪子密鑰。
- 加密流程包括初始置換、16輪迭代運(yùn)算、初始逆置換等。
- 算法結(jié)構(gòu)相對(duì)簡單,運(yùn)算速度快。
DES算法示例
import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import java.security.SecureRandom; public class DESExample { public static void main(String[] args) throws Exception { KeyGenerator keyGenerator = KeyGenerator.getInstance("DES"); SecureRandom secureRandom = new SecureRandom(); keyGenerator.init(secureRandom); SecretKey key = keyGenerator.generateKey(); Cipher desCipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); // 加密 desCipher.init(Cipher.ENCRYPT_MODE, key); byte[] text = "Hello World".getBytes(); byte[] textEncrypted = desCipher.doFinal(text); // 解密 desCipher.init(Cipher.DECRYPT_MODE, key); byte[] textDecrypted = desCipher.doFinal(textEncrypted); System.out.println("原文: " + new String(text)); System.out.println("加密: " + new String(textEncrypted)); System.out.println("解密: " + new String(textDecrypted)); } }
這段代碼使用DES算法的Java JCE實(shí)現(xiàn)來完成一個(gè)字符串的加密和解密。關(guān)鍵是使用KeyGenerator生成密鑰,Cipher完成加解密操作。DES現(xiàn)在也已經(jīng)被AES等算法逐漸取代,但它的基本設(shè)計(jì)思路仍影響后續(xù)的對(duì)稱算法。
AES算法
AES(Advanced Encryption Standard)是一種對(duì)稱加密算法,它被廣泛地應(yīng)用于電子商務(wù)、互聯(lián)網(wǎng)等信息系統(tǒng)中。
AES算法特點(diǎn)
使用對(duì)稱加密,加解密使用相同密鑰。
分組加密,明文被分成128位的塊進(jìn)行處理。
密鑰長度可選擇128、192、256位。
算法結(jié)構(gòu)較復(fù)雜,包括字節(jié)替代、行移位、列混淆、輪密鑰加等步驟。
安全性高,抗差分及線性攻擊的能力強(qiáng)。
AES算法示例
import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; public class AESExample { public static void main(String[] args) throws Exception { KeyGenerator keyGen = KeyGenerator.getInstance("AES"); keyGen.init(128); // 設(shè)置密鑰長度為128位 SecretKey secretKey = keyGen.generateKey(); Cipher cipher = Cipher.getInstance("AES"); // 加密 cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] text = "Hello World".getBytes(); byte[] textEncrypted = cipher.doFinal(text); // 解密 cipher.init(Cipher.DECRYPT_MODE, secretKey); byte[] textDecrypted = cipher.doFinal(textEncrypted); System.out.println("原文: " + new String(text)); System.out.println("加密: " + new String(textEncrypted)); System.out.println("解密: " + new String(textDecrypted)); } }
該示例使用AES算法的Java JCE實(shí)現(xiàn)來完成一個(gè)字符串的加密和解密。AES具有更高的安全性,已逐漸取代DES成為對(duì)稱加密的首選算法。
RSA算法
RSA是一種非對(duì)稱加密算法,也是目前使用最廣泛的公鑰加密算法。
RSA算法特點(diǎn)
非對(duì)稱加密:使用公鑰加密,私鑰解密,兩個(gè)密鑰互為對(duì)稱。
安全性:RSA算法的安全性依賴于大整數(shù)分解問題的難度。
密鑰長度通常為1024位或2048位。密鑰越長,安全性越高,但加解密速度降低。
適用于數(shù)字簽名和數(shù)據(jù)加密。
RSA算法示例
import javax.crypto.Cipher; import java.security.*; public class RSAExample { public static void main(String[] args) throws Exception { KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); keyPairGen.initialize(2048); KeyPair keyPair = keyPairGen.generateKeyPair(); Cipher cipher = Cipher.getInstance("RSA"); // 加密 cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic()); byte[] text = "Hello World".getBytes(); byte[] textEncrypted = cipher.doFinal(text); // 解密 cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate()); byte[] textDecrypted = cipher.doFinal(textEncrypted); System.out.println("原文: " + new String(text)); System.out.println("加密: " + new String(textEncrypted)); System.out.println("解密: " + new String(textDecrypted)); } }
該例子中我們使用RSA算法生成了一對(duì)公鑰和私鑰,并利用公鑰加密,私鑰解密完成了對(duì)字符串的RSA加密。RSA能夠?qū)崿F(xiàn)安全的信息傳輸,是網(wǎng)絡(luò)通信中的重要加密算法。
MD5算法
MD5是一種廣泛使用的哈希算法,主要用于生成信息摘要。
MD5算法特點(diǎn)
生成128位的信息摘要。
哈希值的微小變化會(huì)產(chǎn)生完全不同的哈希結(jié)果。
計(jì)算MD5哈希值很快。
MD5是一種單向哈希算法,無法通過哈希值反算出原文。
MD5在強(qiáng)碰撞攻擊下不安全,通常用于數(shù)據(jù)完整性驗(yàn)證,不用于數(shù)字簽名。
MD5算法示例
import java.security.MessageDigest; public class MD5Example { public static void main(String[] args) throws Exception { String input = "Hello World"; MessageDigest md = MessageDigest.getInstance("MD5"); byte[] inputByteArray = input.getBytes(); md.update(inputByteArray); byte[] resultByteArray = md.digest(); for (int i = 0; i < resultByteArray.length; i++) { System.out.printf("%02x", resultByteArray[i]); } } }
該示例通過MessageDigest類獲取MD5算法實(shí)現(xiàn),并生成輸入字符串的MD5哈希值。MD5可用于快速生成文件、字符串等數(shù)據(jù)的數(shù)字指紋。
SHA算法
SHA(Secure Hash Algorithm)是一系列密碼散列函數(shù),主要用于生成數(shù)字指紋保障數(shù)據(jù)完整性。
SHA算法特點(diǎn)
生成長度固定的信息摘要,常見的有SHA-1、SHA-256、SHA-512等。
抗修改性強(qiáng),對(duì)輸入數(shù)據(jù)稍加修改會(huì)得到完全不同的哈希值。
抗碰撞性強(qiáng),難以找到兩段內(nèi)容哈希值相同的碰撞。
不可逆性,無法通過哈希值反算出原始數(shù)據(jù)。
哈希運(yùn)算速度快。
SHA算法示例
import java.security.MessageDigest; public class SHAExample { public static void main(String[] args) throws Exception { String input = "Hello World"; MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(input.getBytes()); byte[] digest = md.digest(); for (byte b : digest) { System.out.printf("%02x", b); } } }
該示例通過MessageDigest獲取SHA-256算法實(shí)現(xiàn),并生成輸入字符串的哈希值。SHA系列廣泛用于數(shù)字簽名、數(shù)據(jù)完整性驗(yàn)證等場景中。
總結(jié)
通過上文的介紹,我們了解到DES、AES、RSA、MD5、SHA等是當(dāng)前應(yīng)用最廣泛的幾種加密算法。這些算法在保證信息安全方面各有優(yōu)勢。DES具有運(yùn)算速度快的特點(diǎn),AES安全性更高,RSA是目前最優(yōu)秀的公開密鑰系統(tǒng),MD5和SHA系列是常用的消息摘要算法。各種算法在繼承前人研究的基礎(chǔ)上不斷改進(jìn),為我們提供了更多可選擇的信息安全保障手段。信息安全領(lǐng)域仍有許多問題值得我們持續(xù)探索,相信通過科研人員的不斷努力,會(huì)有更多更優(yōu)秀的加密算法問世,為構(gòu)建一個(gè)安全的信息化社會(huì)提供支持。
以上就是Java中幾種常用加密算法盤點(diǎn)的詳細(xì)內(nèi)容,更多關(guān)于Java加密算法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解析java稀疏數(shù)組如何幫助我們節(jié)省內(nèi)存提升性能
這篇文章主要為大家介紹了java稀疏數(shù)組如何幫助我們節(jié)省內(nèi)存提升性能解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11Java代碼實(shí)現(xiàn)微信頁面滾動(dòng)防露底(核心代碼)
這篇文章主要介紹了Java代碼實(shí)現(xiàn)微信頁面滾動(dòng)防露底的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09java獲取redis日志信息與動(dòng)態(tài)監(jiān)控信息的方法
這篇文章主要給大家介紹了關(guān)于java如何獲取redis日志信息與動(dòng)態(tài)監(jiān)控信息的方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。2017-04-04springboot配置druid多數(shù)據(jù)源的示例代碼
這篇文章主要介紹了springboot配置druid多數(shù)據(jù)源的示例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09詳解如何使用java實(shí)現(xiàn)Open Addressing
這篇文章主要介紹了詳解如何使用java實(shí)現(xiàn)Open Addressing,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12