01. 对称密码——算法
密碼算法
DES
首先聲明!!!
由于DES的密文可以在短時間內(nèi)被破譯,現(xiàn)已不再使用。
是什么?
DES(Data Encryption Standard)是1977年美國聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS)中采用的一種對稱密碼。
怎么做?(加密和解密)
DES將64 bits的明文加密成64 bits的密文。但實(shí)質(zhì)上其密鑰長度為56 bits,因?yàn)槊扛?個比特會設(shè)置一個檢查錯誤的比特。
由于每次只能加密64比特,所以當(dāng)明文較長時,需要對加密進(jìn)行迭代,迭代的方式即稱為模式。(后續(xù)提及)
DES的結(jié)構(gòu)(Feistel網(wǎng)絡(luò))
在Feistel網(wǎng)絡(luò)中,加密的各個步驟稱為輪(round),整個加密過程就是進(jìn)行若干次輪的循環(huán)。DES是一種16輪循環(huán)的Feistel網(wǎng)絡(luò)。
Feistel網(wǎng)絡(luò)加密和解密具體步驟:
其中,
“輪函數(shù)”:根據(jù)RD與子密鑰生成看似隨機(jī)的比特序列,用于對LD加密。
“子密鑰”:本輪加密所使用的密鑰,每一輪都需要一個不同的子密鑰(subkey)。
注意:
最后一輪加密后,不需要對調(diào)。
使用同一子密鑰按照相反順序,即可完成解密——加密解密結(jié)構(gòu)相同。
Feistel網(wǎng)絡(luò)中輪數(shù)可以任意增加,可以使用任意函數(shù)作為輪函數(shù)(即使不存在反函數(shù)也OK!)。
越復(fù)雜越好!反正能解!
綜上,無論任何輪數(shù),任何輪函數(shù),都可用相同結(jié)構(gòu)加密和解密,且加密結(jié)果必定能正確解密。
三重DES
是什么?
三重DES(triple-DES)是為了增加DES的強(qiáng)度,重復(fù)3次所得到的一種密碼算法,縮寫3DES
怎么做?
其過程是 加密–解密–加密 ,為的是兼容普通的DES(當(dāng)所有密鑰相同時)。
使用兩(三)種不同密鑰的算法,稱為DES-EDE2(3)(Encryption、Decryption)
結(jié)構(gòu)
DES-EDE3加密過程現(xiàn)狀
處理速度不高,除了向下兼容,很少用于新的用途。
AES——高級加密標(biāo)準(zhǔn)
2000年,AES(Advanced Encryption Standard)最終被確定為Rijndael對稱密碼算法。
什么是Rijndael
Rijndael的分組長度和密鑰長度可以選擇以32比特為單位,在128到256比特的范圍。
AES規(guī)格,分組長度固定為128比特,密鑰長度只有128、192和256比特三種。
Rijndael的加密和解密
DES使用Feistel網(wǎng)絡(luò),Rijndael算法使用SPN結(jié)構(gòu)(Substitution-Permutation network, 代替置換網(wǎng)絡(luò))。
與DES一樣,Rijndael算法也是由多個輪構(gòu)成,每一輪分為SubBytes、ShiftRows、MixColumns和AddRoundKey四個步驟。
加密四個步驟
輸入分組為128比特,即16字節(jié)
其解密過程也是使用相同的結(jié)構(gòu),順序調(diào)換罷了。
在這種結(jié)構(gòu)中,輸入的所有比特在一輪中都會被加密,這個Feistel網(wǎng)絡(luò)有所區(qū)別,使得其加密所需輪數(shù)更少,此外,加密過程還能以字節(jié)、行、列為單位并行計(jì)算。
------本文圖文參考書《圖解密碼技術(shù)》------
總結(jié)
以上是生活随笔為你收集整理的01. 对称密码——算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++(十)——模板(上)
- 下一篇: unity 的资源加载问题:一旦永久释放