欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2017年01月05日 10:14:45   作者:郭朝  
本篇文章主要介紹了Java利用實現(xiàn)對稱加密(DES、3DES、AES),具有一定的參考價值,有興趣的可以了解一下。

有兩句話是這么說的:

1)算法和數(shù)據(jù)結(jié)構(gòu)就是編程的一個重要部分,你若失掉了算法和數(shù)據(jù)結(jié)構(gòu),你就把一切都失掉了。

2)編程就是算法和數(shù)據(jù)結(jié)構(gòu),算法和數(shù)據(jù)結(jié)構(gòu)是編程的靈魂。

注意,這可不是我說的,是無數(shù)程序員總結(jié)的,話說的很實在也很精辟,若想長久可持續(xù)發(fā)展,多研究算法還是很有必要的,今天我給大家說說加密算法中的對稱加密算法,并且這里將教會大家對稱加密算法的編程使用。包含DES、3DES和AES三種對稱加密算法的編程使用,干貨滿滿。

1.對稱密碼算法

對稱密碼算法是當(dāng)今應(yīng)用范圍最廣,使用頻率最高的加密算法。它不僅應(yīng)用于軟件行業(yè),在硬件行業(yè)同樣流行。各種基礎(chǔ)設(shè)施凡是涉及到安全需求,都會優(yōu)先考慮對稱加密算法。

對稱密碼算法的加密密鑰和解密密鑰相同,對于大多數(shù)對稱密碼算法,加解密過程互逆。

(1)加解密通信模型

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

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

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

(4)分組密碼工作模式

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

2)CBC:密文鏈接(常用的,明文加密前需要先和前面的密文進行異或運算,也就是相同的明文加密后產(chǎn)生不同的密文)

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

3)CFB:密文反饋

4)OFB:輸出反饋

5)CTR:計數(shù)器

這五種工作模式主要是密碼學(xué)中算法在進行推導(dǎo)演算的時候所應(yīng)用到的。

6.分組密碼填充方式

1)NoPadding:無填充

2)PKCS5Padding:

3)ISO10126Padding:

7.常用對稱密碼:

1)DES(Data Encryption Standard,數(shù)據(jù)加密標(biāo)準(zhǔn))

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

3)AES(Advanced Encryption Standard,高級數(shù)據(jù)加密標(biāo)準(zhǔn),AES算法可以有效抵制針對DES的攻擊算法)
先來看一下這三種算法的簡單對比:

算法 密鑰長度 默認(rèn)密鑰長度 工作模式 填充方式
DES 56 56 ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 NoPadding、PKCS5Padding、ISO10126Padding
3DES 112、168 168 ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 NoPadding、PKCS5Padding、ISO10126Padding
AES 128、192、256 128 ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 NoPadding、PKCS5Padding、ISO10126Padding

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

2.DES算法

1.DES:數(shù)據(jù)加密標(biāo)準(zhǔn),是對稱加密算法領(lǐng)域中的典型算法

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

3.Java實現(xiàn)

1)生成密鑰

KeyGenerator keyGen = KeyGenerator.getInstance("DES");//密鑰生成器
keyGen.init(56);//初始化密鑰生成器
SecretKey secretKey = keyGen.generateKey();//生成密鑰
byte[] key = secretKey.getEncoded();//密鑰字節(jié)數(shù)組

2)加密

SecretKey secretKey = new SecretKeySpec(key, "DES");//恢復(fù)密鑰
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");//恢復(fù)密鑰
Cipher cipher = Cipher.getInstance("DES");//Cipher完成加密或解密工作類
cipher.init(Cipher.DECRYPT_MODE, secretKey);//對Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//解密data

我們可以發(fā)現(xiàn),加密解密我們只是設(shè)置了不同的模式而已。

3.3DES算法

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

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

3.Java實現(xiàn)

1)生成密鑰

KeyGenerator keyGen = KeyGenerator.getInstance("DESede");//密鑰生成器
keyGen.init(168); //可指定密鑰長度為112或168,默認(rèn)為168 
SecretKey secretKey = keyGen.generateKey();//生成密鑰
byte[] key = secretKey.getEncoded();//密鑰字節(jié)數(shù)組

2)3DES加密

SecretKey secretKey = new SecretKeySpec(key, "DESede");//恢復(fù)密鑰
Cipher cipher = Cipher.getInstance("DESede");//Cipher完成加密或解密工作類
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//對Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

3)3DES解密

SecretKey secretKey = new SecretKeySpec(key, "DESede");//恢復(fù)密鑰
Cipher cipher = Cipher.getInstance("DESede");//Cipher完成加密或解密工作類
cipher.init(Cipher.DECRYPT_MODE, secretKey);//對Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//解密data

4.AES算法(推薦使用)

1.AES:高級數(shù)據(jù)加密標(biāo)準(zhǔn),能夠有效抵御已知的針對DES算法的所有攻擊

2.特點:密鑰建立時間短、靈敏性好、內(nèi)存需求低、安全性高

3.Java實現(xiàn)

1)生成密鑰

KeyGenerator keyGen = KeyGenerator.getInstance("AES");//密鑰生成器
keygen.init(128); //默認(rèn)128,獲得無政策權(quán)限后可為192或256
SecretKey secretKey = keyGen.generateKey();//生成密鑰
byte[] key = secretKey.getEncoded();//密鑰字節(jié)數(shù)組

2)AES加密

SecretKey secretKey = new SecretKeySpec(key, "AES");//恢復(fù)密鑰
Cipher cipher = Cipher.getInstance("AES");//Cipher完成加密或解密工作類
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//對Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

3)AES解密

SecretKey secretKey = new SecretKeySpec(key, "AES");//恢復(fù)密鑰
Cipher cipher = Cipher.getInstance("AES");//Cipher完成加密或解密工作類
cipher.init(Cipher.DECRYPT_MODE, secretKey);//對Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//解密data

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

到此,DES / 3DES / AES 三種算法實現(xiàn) 對稱加密 就說完了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java線程并發(fā)工具類CountDownLatch原理及用法

    Java線程并發(fā)工具類CountDownLatch原理及用法

    這篇文章主要介紹了Java線程并發(fā)工具類CountDownLatch原理及用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • SpringBoot實現(xiàn)圖片防盜鏈功能

    SpringBoot實現(xiàn)圖片防盜鏈功能

    出于安全考慮,我們需要后端返回的圖片只允許在某個網(wǎng)站內(nèi)展示,不想被爬蟲拿到圖片地址后被下載,或者,不想瀏覽器直接訪問圖片鏈接,所以本文將給大家介紹SpringBoot實現(xiàn)圖片防盜鏈功能,需要的朋友可以參考下
    2024-04-04
  • Springboot yml如何獲取系統(tǒng)環(huán)境變量的值

    Springboot yml如何獲取系統(tǒng)環(huán)境變量的值

    這篇文章主要介紹了Springboot yml如何獲取系統(tǒng)環(huán)境變量的值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java Thread之Sleep()使用方法總結(jié)

    Java Thread之Sleep()使用方法總結(jié)

    這篇文章主要介紹了Java Thread之Sleep()使用方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Java默認(rèn)傳入時間段時間的實例

    Java默認(rèn)傳入時間段時間的實例

    下面小編就為大家?guī)硪黄狫ava默認(rèn)傳入時間段時間的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • springboot使用redisRepository和redistemplate操作redis的過程解析

    springboot使用redisRepository和redistemplate操作redis的過程解析

    本文給大家介紹springboot整合redis/分別用redisRepository和redistemplate操作redis,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-05-05
  • 詳解常用的Spring Bean擴展接口

    詳解常用的Spring Bean擴展接口

    本篇文章主要介紹了一些常用的Spring Bean擴展接口以及它們的簡單用法,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-05-05
  • Java源碼解析之超級接口Map

    Java源碼解析之超級接口Map

    今天給各位小伙伴介紹一下超級接口Map,文中對接口Map講的非常詳細(xì),對正在學(xué)習(xí)java的小伙伴們有很好的幫助喲,需要的朋友可以參考下
    2021-05-05
  • mybatis之多參數(shù)查詢方式

    mybatis之多參數(shù)查詢方式

    這篇文章主要介紹了mybatis之多參數(shù)查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • MyBatis實現(xiàn)樂觀鎖和悲觀鎖的示例代碼

    MyBatis實現(xiàn)樂觀鎖和悲觀鎖的示例代碼

    在數(shù)據(jù)庫操作中,樂觀鎖和悲觀鎖是兩種常見的并發(fā)控制策略,本文主要介紹了MyBatis實現(xiàn)樂觀鎖和悲觀鎖的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07

最新評論