2 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
讓我們以需要192位密鑰的TripesDES算法為例
那是不完全正確的。TripleDES基本上通過3個(gè)鍵將DES應(yīng)用于3次。這三個(gè)鍵可以是:
都一樣。那是常規(guī)的DES。我們可以忽略該選項(xiàng)
都不同。這就是您所期望的192位密鑰(共3個(gè)密鑰)
2個(gè)鍵相同,第3個(gè)不同。比所有密鑰都不同時(shí)要弱,但仍比常規(guī)DES要強(qiáng)。這給了我們128位密鑰(兩個(gè)密鑰合在一起)。
.NET實(shí)現(xiàn)支持最后2個(gè)選項(xiàng),因此,當(dāng)您使用128位密鑰(就像您在問題中所做的那樣)時(shí)-它會(huì)將其拆分為2個(gè)密鑰,并使用其中一個(gè)(第一個(gè))作為第3個(gè)密鑰,因此結(jié)果是您將擁有1個(gè)和第三鍵相同。
請(qǐng)注意,.NET將驗(yàn)證您的密鑰不是“弱”三元DES密鑰,因此對(duì)于您所舉的示例,它將拋出異常,因?yàn)槊荑€的左半部分和右半部分相同,如上所述。導(dǎo)致使用3個(gè)相同的密鑰進(jìn)行加密,因此整個(gè)過程將簡化為常規(guī)DES。
通常,.NET會(huì)驗(yàn)證您傳遞的密鑰是否具有給定算法的合法大小。
您可以通過首先使用一些16字節(jié)密鑰進(jìn)行加密來驗(yàn)證上述內(nèi)容:
var key = new byte[] {
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0xAA,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
};
然后手動(dòng)將前8個(gè)字節(jié)附加到末尾以獲取24個(gè)字節(jié)的密鑰:
var fullKey = key.Concat(key.Take(8)).ToArray()
并使用它解密(因?yàn)樯厦娴?6字節(jié)和24字節(jié)密鑰相同,所以解密就很好了)。
- 2 回答
- 0 關(guān)注
- 137 瀏覽
添加回答
舉報(bào)