gpt4 book ai didi

c# - 解密 TripleDES : Specified key is a known weak key and cannot be used

转载 作者:行者123 更新时间:2023-11-30 14:50:05 24 4
gpt4 key购买 nike

为什么这段代码会返回弱 key 错误

static public byte[] TDESDecrypt(byte[] toDecrypt, byte[] key, CipherMode mode = CipherMode.ECB, PaddingMode padding = PaddingMode.None)
{
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = key;
tdes.Mode = mode;
tdes.Padding = padding;
ICryptoTransform cTransform = tdes.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toDecrypt, 0, toDecrypt.Length);
tdes.Clear();
return resultArray;
}

当我尝试执行“tdes.Key = key”行时,出现错误

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

为什么?我正在尝试的 key 是随机的,但其中一个经过测试的 key 是 FB13347FE570DC4FFB13347FE570DC4F。问题出在哪里?

最佳答案

您可以阅读 wikipedia例如,密码学中的弱 key 是什么。对于三重 DES,有一种方法 (TripleDES.IsWeakKey) 可以检查三重 DES key 是否存在弱点。在您的情况下, key FB13347FE570DC4FFB13347FE570DC4F 在某种意义上是对称的,即它的前 8 个字节与后 8 个字节完全相等。这意味着如果您使用该 key 加密某些内容,然后再次加密该加密信息 - 您将恢复原始文本(由于这种具体加密算法的工作原理),这显然是危险的。

所以简而言之,.NET 可以保护您免于做出导致密码漏洞的危险事情。如果您将使用标准的 GenerateKey() 函数生成 key (或者只是不显式设置 Key)- 将不会生成弱 key 。

关于为什么该 key 对于三重 DES 来说很弱的更多信息。 3DES 之所以这样命名,是因为它本质上使用 3 个 key ,并使用这些 key 进行 3 次纯 DES 加密/解密。每个 key 的长度为 8 个字节,因此 3DES key 大小为 8*3 = 24 个字节。但是,算法还允许第一个和第三个 key 相同,因此允许使用 16 字节 key (如您的示例)。在那种情况下,这 16 个字节的前半部分用作第三个 key 。此选项提供的安全性较低,但仍然可行。

现在,如果您的 16 字节 key 的前半部分和后半部分相同,那么 3DES 将使用的所有三个 key 都是相同的。假设 3DES 是这样工作的:

DES encrypt with 3rd(DES Decrypt with 2nd(DES Encrypt with 1st(plaintext)))

您会看到,在您的情况下,您退回到使用简单的 DES,这首先违背了使用 3DES 的全部目的。

关于c# - 解密 TripleDES : Specified key is a known weak key and cannot be used,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37542102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com