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

TripleDES:指定密钥是'TripleDES'的已知弱密钥,无法使用

如何解决《TripleDES:指定密钥是'TripleDES'的已知弱密钥,无法使用》经验,为你挑选了1个好方法。

我正在使用.NET 3.0类System.Security.Cryptography.MACTripleDES类来生成MAC值.不幸的是,我正在使用一个使用" 1111111111111111"(作为十六进制)作为单长DES密钥的硬件设备.System.Security.Cryptography如果您尝试使用加密弱键,库会对键执行一些完整性检查并返回异常.

例如:

byte[] key = new byte[24];
for (int i = 0; i < key.Length; i++)
  key[i] = 0x11;

byte[] data = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte[] computedMac = null;
using (MACTripleDES mac = new MACTripleDES(key))
{
  computedMac = mac.ComputeHash(data);
}

抛出一个例外

System.Security.Cryptography.CryptographicException : Specified key is a known weak key for 'TripleDES' and cannot be used.

我知道这不是一个安全的密钥.在生产中,设备将使用新的安全密钥进行闪存.同时,有没有办法抑制这个异常被抛出?也许是一个app.config或注册表设置?

编辑:密钥实际上是101010 ...由于算法强制奇校验.我不确定这是DES算法的通用性还是我付款处理工作的要求.

编辑2:Daniel的答案下面有一些关于黑客.NET的非常好的信息.不幸的是,我无法使用这种技术解决我的问题,但仍然有一些有趣的阅读.



1> Daniel Sloof..:

我不会真的推荐它,但你应该能够使用Reflector和Add-in ReflexIL修改检查弱键的IL代码

编辑:

对不起,我需要一段时间才能在我的虚拟机(运行Ubuntu)中加载所有内容并且不想弄乱Mono.

安装ReflexIL加载项:视图 - >加载项 - >添加

打开ReflexIL:工具 - > ReflexIL v0.9

找到IsWeakKey()函数.(您可以使用搜索:F3)

将出现两个函数,双击System.Security.Cryptography.TripleDES中找到的函数

ReflexIL也应该出现.在"说明"选项卡中,一直向下滚动到第29行(偏移63).

将ldc.i4.1更改为ldc.i4.0,这意味着该函数将始终返回false.

在程序集窗格(左侧)中,您现在可以向上滚动并单击"公共语言运行库",ReflexIL窗格将为您提供保存它的选项.

重要笔记:

首先备份原始组件!(mscorlib.dll中)

mscorlib.dll是一个已签名的程序集,您需要使用.NET SDK(sn.exe工具)来使ReflexIL跳过验证.我自己检查过这个,你应该已经安装了Visual C#.当被要求时,只需点击"注册它以进行验证跳过(在此计算机上)".

我不认为我必须告诉你只在开发机器上使用它:)

祝好运!如果您需要其他说明,请随时使用评论框.

EDIT2:

我糊涂了!

http://i44.tinypic.com/2r6fwbo_th.png

我完全从mscorlib程序集中的set_Key函数中删除了IsWeakKey检查.我绝对肯定我修改了正确的功能,并且我做得正确.Reflector的反汇编程序不再显示检查.然而,有趣的是,Visual C#仍然会抛出相同的异常.

这让我相信mscorlib必须以某种方式仍然在某处缓存.但是,将mscorlib.dll重命名为mscorlib.dll_导致MSVC#崩溃,因此它仍必须依赖于原始dll.

这是非常有趣的东西,但我想我已经达到了一点,我不知道发生了什么,它只是没有任何意义!见附图.:(

EDIT3:

我在Olly注意到,与mscoree,mscorsec和mscorwks等组件不同; mscorlib.dll实际上不在:c:\ WINDOWS\Microsoft.NET\Framework\v2.0.50727 \

但相反,在看起来不存在的位置:C:\ WINDOWS\assembly\NativeImages_v2.0.50727_32\mscorlib\6d667f19d687361886990f3ca0f49816\mscorlib.ni.dll

我想我在这里遗漏了一些东西:)将对此进行更多研究.

edit4:

即使在已经修补了一切IsWeakKey,以及带移除,并产生新的原生图像周围播放(X.NI使用"ngen.exe" .DLL)的mscorlib.dll的,我收到了同样的异常.我必须注意,即使在卸载本机mscorlib映像后,它仍然使用mscorlib.ni.dll ... Meh.

我放弃.我希望有人能够回答到底是怎么回事,因为我肯定不知道.:)

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