2 回答

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