当前位置:  开发笔记 > 编程语言 > 正文

为什么RijndaelManaged的长度键有效?

如何解决《为什么RijndaelManaged的长度键有效?》经验,为你挑选了1个好方法。

关于方法......

RijndaelManaged.CreateDecryptor Method (Byte[],?Byte[])

这里说的是第一个参数......

用于对称算法的密钥.密钥大小必须为128,192或256位.

但我可以将键设置为任意长度的字符串......

var key = Encoding.UTF8.GetBytes("whetever...");

为什么不对字节数组的长度更加挑剔?它如何确定使用三个密钥长度中的哪一个?



1> Maarten Bode..:

任何密钥大小都不适用.只允许一组特定的密钥大小.

LegalKeySizes尺寸特性RijndaelManaged实际上报告以下值:

MinSize = 128
MaxSize = 256
SkipSize = 64

这应该表明只支持AES密钥大小:128,192,当然还有256.这基本上意味着RijndaelManaged没有完全实现Rijndael,它也允许160和224位作为密钥大小.实际上,我认为它不允许块大小为160和224位.

现在你的问题引起了我的一些问号,所以我决定看看哪些密钥大小实际被接受而没有引发异常,我得到了以下令人惊讶的结果:

8, 9, 10, 11, 12, 13, 14, 15, 16, 24, 32

或者,以位而不是字节:

64, 72, 80, 88, 96, 104, 112, 120, 128, 192, 256

因此RijndaelManaged似乎接受的键大小超过了指定的大小,并且这些额外的键大小低于类和Rijndael算法指定的最小长度.

现在让我们用这些无效的密钥大小加密一些东西:

064 : 1903b797b48ce006e618cb605d356981cc9b231195420010916e449037d3ac5b
072 : 1903b797b48ce006e618cb605d356981cc9b231195420010916e449037d3ac5b
080 : 1903b797b48ce006e618cb605d356981cc9b231195420010916e449037d3ac5b
088 : 1903b797b48ce006e618cb605d356981cc9b231195420010916e449037d3ac5b
096 : 4002ae70943dafdec10d4fbe2f97dc95b0a61e7412277197623b6d3d3e0da31c
104 : 4002ae70943dafdec10d4fbe2f97dc95b0a61e7412277197623b6d3d3e0da31c
112 : 4002ae70943dafdec10d4fbe2f97dc95b0a61e7412277197623b6d3d3e0da31c
120 : 4002ae70943dafdec10d4fbe2f97dc95b0a61e7412277197623b6d3d3e0da31c
128 : 66e94bd4ef8a2c3b884cfa59ca342b2e9434dec2d00fdac765f00c0c11628cd1
192 : aae06992acbf52a3e8f4a96ec9300bd71045be567103016ac50b21b86fc5457e
256 : dc95c078a2408989ad48a21492842087f3c003ddc4a7b8a94baedffc3d214c38

注意:对于那些感兴趣的人:CBC的密钥由全零,明文和IV组成,只有16个字节也设置为零.测试在Windows 10上执行:

操作系统:Microsoft Windows NT 10.0.10240.0,CLR:4.0.30319.42000

所以你只得到一些无效的,未指定的结果,用于密钥大小64,72,80,88,96,104,112,120.查看代码它基本上只使用8个字节作为密钥,并将其他字节设置为零以便密钥尺寸8..11和12字节作为按键尺寸12..15的键.在这种情况下,块大小将是128位,否则块大小将与密钥大小相同.因此,在将密钥用于密钥大小72,80,88,104,112和120位之前,实现实际上从密钥的末尾剥离一到三个字节.

所以基本上这似乎是实现中的一个错误.基本上你不应该RijndaelManaged在返回的值之外使用LegalKeySizes.


如前所述,您应该使用Rfc2898DeriveBytes将密码转换为具有有效密钥大小的密钥.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有