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 关注
- 123 浏览
添加回答
举报