前言
一直困擾著我關(guān)于數(shù)據(jù)加密這一塊,24號(hào)晚上用了接近3個(gè)小時(shí)去完成一項(xiàng)任務(wù),本以為立馬能解決,但是為了保證數(shù)據(jù)的安全性,我們開(kāi)始去對(duì)數(shù)據(jù)進(jìn)行加密,然后接下來(lái)3個(gè)小時(shí)專門(mén)去研究加密這一塊,然而用著用著卻發(fā)現(xiàn)了一點(diǎn)問(wèn)題,于是下班回來(lái)到寫(xiě)這篇博客到深夜才正式解決,請(qǐng)往下看。
3DES數(shù)據(jù)加密
由于數(shù)據(jù)需要獲取出來(lái)并顯示于是只能使用對(duì)稱加密,關(guān)于加密這一塊網(wǎng)上對(duì)于.NET Framework的實(shí)現(xiàn)數(shù)不勝數(shù),好像對(duì)于.NET Core這一塊比較少,于是就開(kāi)始進(jìn)行研究。這個(gè)時(shí)候就利用DES或者Triple DES也稱作3DES,全名為T(mén)riple Data Encryption Algorithm (TDEA or Triple DEA),也就是對(duì)稱密碼塊密碼,3DES對(duì)數(shù)據(jù)的每個(gè)數(shù)據(jù)塊利用算法進(jìn)行3次加密,最初開(kāi)始設(shè)計(jì)該算法時(shí),位數(shù)只有56位也就是7個(gè)字節(jié),設(shè)計(jì)者認(rèn)為已經(jīng)足夠用,但是隨著計(jì)算機(jī)的高速發(fā)展,暴露破解已經(jīng)使得該算法呈現(xiàn)的問(wèn)題日益突出,而3DES算法的出現(xiàn)提供了一種比較簡(jiǎn)單的方法來(lái)增加密鑰的大小從而防止攻擊,而不是重新設(shè)計(jì)一套全新的分組密碼算法。
3DES加密算法命名
定義算法最早期的標(biāo)準(zhǔn)被放在ANS X9.52中并在1998年發(fā)布并將其描述為三重?cái)?shù)據(jù)加密算法(簡(jiǎn)稱TDEA),在ANSI X3.92中定義了該算法的三個(gè)操作但是并沒(méi)有使用DES或者3DES,直到1999年發(fā)布的FIPS PUB 46-3在正式命名三重?cái)?shù)據(jù)加密算法,大概在2004到2005的樣子才正式引入三重?cái)?shù)據(jù)加密算法,之前一直以TDEA存在著,也就是說(shuō)TDEA就是3DES,但是沒(méi)有使用3DES作為標(biāo)準(zhǔn)術(shù)語(yǔ)。
3DES算法邏輯
三重?cái)?shù)據(jù)加密算法使用包括密鑰K1,密鑰K2和密鑰約束K3,每一個(gè)包含56位不包含奇偶校驗(yàn),算法實(shí)現(xiàn)公式如下:
ciphertext = EK3(DK2(EK1(plaintext)))
即
密文 = EK3(DK2(EK1(平文)))
用K1對(duì)數(shù)據(jù)進(jìn)行加密,用K2對(duì)數(shù)據(jù)進(jìn)行解密,用K3對(duì)數(shù)據(jù)再加密。
解密公式為如下:
plaintext = DK1(EK2