亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java 對(duì)稱(chēng)加密幾種算法分別實(shí)現(xiàn)

 更新時(shí)間:2017年01月05日 11:51:52   投稿:lqh  
這篇文章主要介紹了Java 對(duì)稱(chēng)加密使用DES / 3DES / AES 這三種算法分別實(shí)現(xiàn)的相關(guān)資料,這里提供了實(shí)例代碼,需要的朋友可以參考下

Java 對(duì)稱(chēng)加密使用DES / 3DES / AES 這三種算法分別實(shí)現(xiàn)

有兩句話是這么說(shuō)的:

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

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

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

1.對(duì)稱(chēng)密碼算法

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

對(duì)稱(chēng)密碼算法的加密密鑰和解密密鑰相同,對(duì)于大多數(shù)對(duì)稱(chēng)密碼算法,加解密過(guò)程互逆。

(1)加解密通信模型

(2)特點(diǎn):算法公開(kāi)、計(jì)算量小、加密速度快、加密效率高

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

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

(4)分組密碼工作模式

1)ECB:電子密碼本(最常用的,每次加密均產(chǎn)生獨(dú)立的密文分組,并且對(duì)其他的密文分組不會(huì)產(chǎn)生影響,也就是相同的明文加密后產(chǎn)生相同的密文)
2)CBC:密文鏈接(常用的,明文加密前需要先和前面的密文進(jìn)行異或運(yùn)算,也就是相同的明文加密后產(chǎn)生不同的密文)

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

3)CFB:密文反饋
4)OFB:輸出反饋
5)CTR:計(jì)數(shù)器

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

6.分組密碼填充方式

1)NoPadding:無(wú)填充
2)PKCS5Padding:
3)ISO10126Padding:

7.常用對(duì)稱(chēng)密碼:

1)DES(Data Encryption Standard,數(shù)據(jù)加密標(biāo)準(zhǔn))
2)3DES(Triple DES、DESede,進(jìn)行了三重DES加密的算法)
3)AES(Advanced Encryption Standard,高級(jí)數(shù)據(jù)加密標(biāo)準(zhǔn),AES算法可以有效抵制針對(duì)DES的攻擊算法)

先來(lái)看一下這三種算法的簡(jiǎn)單對(duì)比:

算法 密鑰長(zhǎng)度 默認(rèn)密鑰長(zhǎng)度 工作模式 填充方式
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 三種算法實(shí)現(xiàn) 對(duì)稱(chēng)加密:

2.DES算法

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

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

3.Java實(shí)現(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完成加密或解密工作類(lèi)
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//對(duì)Cipher初始化,加密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

3)解密

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

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

3.3DES算法

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

2.缺點(diǎn):處理速度較慢、密鑰計(jì)算時(shí)間較長(zhǎng)、加密效率不高

3.Java實(shí)現(xiàn)

1)生成密鑰

KeyGenerator keyGen = KeyGenerator.getInstance("DESede");//密鑰生成器
keyGen.init(168); //可指定密鑰長(zhǎng)度為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完成加密或解密工作類(lèi)
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//對(duì)Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

3)3DES解密

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

4.AES算法(推薦使用)

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

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

3.Java實(shí)現(xiàn)

1)生成密鑰

KeyGenerator keyGen = KeyGenerator.getInstance("AES");//密鑰生成器
keygen.init(128); //默認(rèn)128,獲得無(wú)政策權(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完成加密或解密工作類(lèi)
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//對(duì)Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

3)AES解密

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

為了方便使用,我對(duì)DES / 3DES / AES 三種算法進(jìn)行了工具類(lèi)編寫(xiě),

地址:http://xiazai.jb51.net/201701/yuanma/Android-UtilsLibrary-master(jb51.net).rar(新增DES/3DES/AES工具類(lèi))。

到此,DES / 3DES / AES 三種算法實(shí)現(xiàn) 對(duì)稱(chēng)加密 就說(shuō)完了.

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Java讀寫(xiě)鎖ReadWriteLock原理與應(yīng)用場(chǎng)景詳解

    Java讀寫(xiě)鎖ReadWriteLock原理與應(yīng)用場(chǎng)景詳解

    這篇文章主要介紹了Java讀寫(xiě)鎖ReadWriteLock原理與應(yīng)用場(chǎng)景詳解,讀寫(xiě)狀態(tài)的設(shè)計(jì),寫(xiě)鎖的獲取與釋放,鎖降級(jí)需要的朋友可以參考下
    2023-02-02
  • SpringMVC獲取請(qǐng)求參數(shù)實(shí)現(xiàn)方法介紹

    SpringMVC獲取請(qǐng)求參數(shù)實(shí)現(xiàn)方法介紹

    Spring MVC 是 Spring 提供的一個(gè)基于 MVC 設(shè)計(jì)模式的輕量級(jí) Web 開(kāi)發(fā)框架,本質(zhì)上相當(dāng)于 Servlet,Spring MVC 角色劃分清晰,分工明細(xì),這篇文章主要介紹了SpringMVC實(shí)現(xiàn)獲取請(qǐng)求參數(shù)方法
    2022-11-11
  • Spring Security實(shí)現(xiàn)禁止用戶重復(fù)登陸的配置原理

    Spring Security實(shí)現(xiàn)禁止用戶重復(fù)登陸的配置原理

    這篇文章主要介紹了Spring Security實(shí)現(xiàn)禁止用戶重復(fù)登陸的配置原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 使用SpringBoot發(fā)送郵箱驗(yàn)證碼的簡(jiǎn)單實(shí)現(xiàn)

    使用SpringBoot發(fā)送郵箱驗(yàn)證碼的簡(jiǎn)單實(shí)現(xiàn)

    這篇文章主要介紹了使用SpringBoot發(fā)送郵箱驗(yàn)證碼的簡(jiǎn)單實(shí)現(xiàn),咱們今天來(lái)講使用QQ郵箱來(lái)發(fā)送和接收驗(yàn)證碼,首先來(lái)介紹一下它在SpringBoot項(xiàng)目中的具體應(yīng)用,需要的朋友可以參考下
    2023-04-04
  • Java泛型之上界下界通配符詳解

    Java泛型之上界下界通配符詳解

    這篇文章主要介紹了Java泛型之上界下界通配符詳解,學(xué)習(xí)使用泛型編程時(shí),更令人困惑的一個(gè)方面是確定何時(shí)使用上限有界通配符以及何時(shí)使用下限有界通配符。本文提供一些設(shè)計(jì)代碼時(shí)要遵循的一些準(zhǔn)則。,需要的朋友可以參考下
    2019-06-06
  • grade構(gòu)建閱讀spring源碼環(huán)境 Idea2020.3的過(guò)程

    grade構(gòu)建閱讀spring源碼環(huán)境 Idea2020.3的過(guò)程

    這篇文章主要介紹了grade構(gòu)建閱讀spring源碼環(huán)境 Idea2020.3,本文分步驟通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • idea報(bào)錯(cuò)之找不到符號(hào):類(lèi)的問(wèn)題及解決

    idea報(bào)錯(cuò)之找不到符號(hào):類(lèi)的問(wèn)題及解決

    這篇文章主要介紹了idea報(bào)錯(cuò)之找不到符號(hào):類(lèi)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Spring Boot應(yīng)用開(kāi)發(fā)初探與實(shí)例講解

    Spring Boot應(yīng)用開(kāi)發(fā)初探與實(shí)例講解

    這篇文章主要介紹了Spring Boot應(yīng)用開(kāi)發(fā)初探與實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java8 對(duì)象轉(zhuǎn)Map時(shí)重復(fù) key Duplicate key xxxx的解決

    java8 對(duì)象轉(zhuǎn)Map時(shí)重復(fù) key Duplicate key xxxx的解決

    這篇文章主要介紹了java8 對(duì)象轉(zhuǎn)Map時(shí)重復(fù) key Duplicate key xxxx的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java實(shí)現(xiàn)收藏功能

    java實(shí)現(xiàn)收藏功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)收藏功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評(píng)論