Java 加密解密基礎(chǔ)分類及模式歸納整理
Java 加密解密基礎(chǔ):
密碼學(xué)是研究編制密碼和破譯密碼的技術(shù)科學(xué)。研究密碼變化的客觀規(guī)律,應(yīng)用于編制密碼以保守通信秘密的,稱為編碼學(xué);應(yīng)用于破譯密碼以獲取通信情報(bào)的,稱為破譯學(xué),總稱密碼學(xué)。
密碼學(xué)常用術(shù)語(yǔ)
明文: 待加密數(shù)據(jù)。
密文: 明文經(jīng)過加密后數(shù)據(jù)。
加密: 將明文轉(zhuǎn)換為密文的過程。
加密算法: 將明文轉(zhuǎn)換為密文的轉(zhuǎn)換算法。
加密密鑰: 通過加密算法進(jìn)行加密操作的密鑰。
解密: 將密文轉(zhuǎn)換為銘文的過程。
解密算法: 將密文轉(zhuǎn)換為明文的轉(zhuǎn)換算法。
解密密鑰: 通過解密短發(fā)進(jìn)行解密操作的密鑰。
密碼學(xué)分類
1.按時(shí)間分
a.古典密碼:以字符為基本加密單元。
b.現(xiàn)代密碼:以信息塊為基本加密單元。
2按保密內(nèi)容的算法劃分
a.受限制算法:算法的保密性基于保持算法的秘密。
b.基于密鑰算法:算法的保密性基于對(duì)密鑰的保密。
3.按密鑰體制劃分
a.對(duì)稱密碼體制:也叫單鑰或私鑰密碼體制,加密過程與解密過程使用同一套密鑰。對(duì)應(yīng)的算法就是對(duì)稱加密算法,例如DES,AES。
b.非對(duì)稱密碼體制:也叫雙鑰或公鑰密碼體制,加密過程與解密過程使用不同的密鑰。對(duì)應(yīng)的算法就是非對(duì)稱加密算法,例如RSA。
4.按明文處理方式劃分
a.流密碼:也稱為序列密碼,加密時(shí)每次加密一位或者一個(gè)字節(jié)的明文。例如RC4算法。
b.分組密碼:加密時(shí)將明文分成固定長(zhǎng)度的組,用同一個(gè)密鑰和算法對(duì)每一組進(jìn)行加密輸出也是固定長(zhǎng)度的明文。當(dāng)最后一組大小不滿足指定的分組大小時(shí),
有兩種處理模式:
無填充模式,直接對(duì)剩余數(shù)據(jù)進(jìn)行加密,此組加密后大小與剩余數(shù)據(jù)有關(guān);
有填充模式,對(duì)于不滿足指定長(zhǎng)度分組的進(jìn)行數(shù)據(jù)填充;如果恰巧最后一組數(shù)據(jù)與指定分組大小相同,那么直接添加一個(gè)指定
大小的分組;填充的最后一個(gè)字節(jié)記錄了填充的字節(jié)數(shù)。
分組密碼工作模式簡(jiǎn)介
1.電子密碼本模--ECB
將明文的各個(gè)分組獨(dú)立的使用相同的密鑰進(jìn)行加密,這種方式加密時(shí)各分組的加密獨(dú)立進(jìn)行互不干涉,因而可并行進(jìn)行。同樣因?yàn)楦鞣纸M獨(dú)立加密的緣故,相同的明文分組加密之后具有相同的密文。該模式容易暴露明文分組的統(tǒng)計(jì)規(guī)律和結(jié)構(gòu)特征。不能防范替換攻擊。
其實(shí)照實(shí)現(xiàn)來看,ECB的過程只是把明文進(jìn)行分組,然后分別加密,最后串在一起的過程。當(dāng)消息長(zhǎng)度超過一個(gè)分組時(shí),不建議使用該模式。在每個(gè)分組中增加隨機(jī)位(如128位分組中96位為有效明文,32位的隨機(jī)數(shù))則可稍微提高其安全性,但這樣無疑造成了加密過程中數(shù)據(jù)的擴(kuò)張。
優(yōu)點(diǎn):
1.簡(jiǎn)單;
2.有利于并行計(jì)算;
3.誤差不會(huì)被傳送;
缺點(diǎn):
1.不能隱藏明文的模式;
2.可能對(duì)明文進(jìn)行主動(dòng)攻擊;
2.密碼分組鏈接模--CBC
需要一個(gè)初始化向量IV,第一組明文與初始化向量進(jìn)行異或運(yùn)算后再加密,以后的每組明文都與前一組的密文進(jìn)行異或運(yùn)算后再加密。IV 不需要保密,它可以明文形式與密文一起傳送。
優(yōu)點(diǎn):
1.不容易主動(dòng)攻擊,安全性好于ECB,適合傳輸長(zhǎng)度長(zhǎng)的報(bào)文,是SSL、IPSec的標(biāo)準(zhǔn)。
缺點(diǎn):
1.不利于并行計(jì)算;
2.誤差傳遞;
3.需要初始化向量IV
3.密文反饋模式--CFB
需要一個(gè)初始化向量IV ,加密后與第一個(gè)分組明文進(jìn)行異或運(yùn)算產(chǎn)生第一組密文,然后對(duì)第一組密文加密后再與第二組明文進(jìn)行異或運(yùn)算纏身第二組密文,一次類推,直到加密完畢。
優(yōu)點(diǎn):
1.隱藏了明文模式;
2.分組密碼轉(zhuǎn)化為流模式;
3.可以及時(shí)加密傳送小于分組的數(shù)據(jù);
缺點(diǎn):
1.不利于并行計(jì)算;
2.誤差傳送:一個(gè)明文單元損壞影響多個(gè)單元;
3.唯一的IV;
4. 輸出反饋模式--OFB
需要一個(gè)初始化向量IV ,加密后得到第一次加密數(shù)據(jù),此加密數(shù)據(jù)與第一個(gè)分組明文進(jìn)行異或運(yùn)算產(chǎn)生第一組密文,然后對(duì)第一次加密數(shù)據(jù)進(jìn)行第二次加密,得到第二次加密數(shù)據(jù),第二次加密數(shù)據(jù)再與第二組明文進(jìn)行異或運(yùn)算產(chǎn)生第二組密文,一次類推,直到加密完畢。
優(yōu)點(diǎn):
1.隱藏了明文模式;
2.分組密碼轉(zhuǎn)化為流模式;
3.可以及時(shí)加密傳送小于分組的數(shù)據(jù);
缺點(diǎn):
1.不利于并行計(jì)算;
2.對(duì)明文的主動(dòng)攻擊是可能的;
3.誤差傳送:一個(gè)明文單元損壞影響多個(gè)單元;
5.計(jì)數(shù)器模式--CTR
使用計(jì)數(shù)器,計(jì)數(shù)器初始值加密后與第一組明文進(jìn)行異或運(yùn)算產(chǎn)生第一組密文,
計(jì)數(shù)器增加,然后,加密后與下一組明文進(jìn)行異或運(yùn)算產(chǎn)生下一組密文,以此類推,直到加密完畢
優(yōu)點(diǎn):
1.可并行計(jì)算;
2.安全性至少與CBC 模式一樣好;
3.加密與解僅涉及密碼算法的加密;
缺點(diǎn):
1.沒有錯(cuò)誤傳播,不易確保數(shù)據(jù)完整性;
分組密碼填充方式簡(jiǎn)介
PKCS5 :填充字符串由一個(gè)值為5的字節(jié)序列組成,每個(gè)字節(jié)填充該字節(jié)序列的長(zhǎng)度。明確定義Block的大小是8位
PKCS7 :填充字符串由一個(gè)值為7的字節(jié)序列組成,每個(gè)字節(jié)填充該字節(jié)序列的長(zhǎng)度。對(duì)于塊的大小是不確定的,可以在1-255之間
ISO10126:填充字符串由一個(gè)字節(jié)序列組成,此字節(jié)序列的最后一個(gè)字節(jié)填充字節(jié)序列的長(zhǎng)度,其余字節(jié)填充隨機(jī)數(shù)據(jù)。
希望本篇文章對(duì)您有所幫助
- 詳解Java利用實(shí)現(xiàn)對(duì)稱加密(DES、3DES、AES)
- [J2SE]Java中3DES加密解密調(diào)用示例
- java常用工具類之DES和Base64加密解密類
- java中常用工具類之字符串操作類和MD5加密解密類
- 一個(gè)Java配置文件加密解密工具類分享
- Java實(shí)現(xiàn)DES加密與解密,md5加密以及Java實(shí)現(xiàn)MD5加密解密類
- 簡(jiǎn)潔實(shí)用的Java Base64編碼加密異常處理類代碼
- Java實(shí)現(xiàn)的DES加密解密工具類實(shí)例
- Java實(shí)現(xiàn)的3des加密解密工具類示例
相關(guān)文章
java.lang.UnsupportedClassVersionError異常正確解決方法
java.lang.UnsupportedClassVersionError異常通常發(fā)生在嘗試在較低版本的Java虛擬機(jī)上運(yùn)行使用更高版本的Jav 編譯器編譯的類文件時(shí),下面就來介紹一下解決方法,感興趣的可以了解一下2024-05-05Java獲取當(dāng)前系統(tǒng)事件System.currentTimeMillis()方法
下面小編就為大家?guī)硪黄狫ava獲取當(dāng)前系統(tǒng)事件System.currentTimeMillis()方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06java創(chuàng)建線程池的7種實(shí)現(xiàn)方法
在Java中線程池是一種管理線程的機(jī)制,它可以創(chuàng)建一組線程并重復(fù)使用它們,避免了創(chuàng)建和銷毀線程的開銷,這篇文章主要給大家介紹了關(guān)于java創(chuàng)建線程池的7種實(shí)現(xiàn)方法,需要的朋友可以參考下2023-10-10基于Spring?Cache實(shí)現(xiàn)Caffeine+Redis二級(jí)緩存
本文主要介紹了基于Spring?Cache實(shí)現(xiàn)Caffeine+Redis二級(jí)緩存,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03SpringBoot利用ThreadPoolTaskExecutor批量插入百萬級(jí)數(shù)據(jù)
在處理大量數(shù)據(jù)時(shí),為了提高效率和性能,通常需要采用批量插入的方式,本文主要介紹了SpringBoot利用ThreadPoolTaskExecutor批量插入百萬級(jí)數(shù)據(jù),具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03SpringBoot中事務(wù)失效的六個(gè)原因解析
這篇文章主要介紹了SpringBoot中事務(wù)失效的六個(gè)原因解析,由于Spring的事務(wù)是基于AOP的方式結(jié)合動(dòng)態(tài)代理來實(shí)現(xiàn)的,因此事務(wù)方法一定要是public的,這樣才能便于被Spring做事務(wù)的代理和增強(qiáng),需要的朋友可以參考下2023-10-10