gpt4 book ai didi

encryption - TripleDESCryptoServiceProvider - 容易受到拒绝服务的攻击吗?

转载 作者:行者123 更新时间:2023-12-03 16:39:43 28 4
gpt4 key购买 nike

我们有一个旧的 ASP.NET 站点,它使用这里的加密方法:

http://www.codekeep.net/snippets/af1cd375-059a-4175-93d7-25eea2c5c660.aspx

当我们调用以下方法时,页面加载非常缓慢,最终返回连接重置:

Decrypt(" ", true);

如果在后续页面请求中多次调用该方法, 应用程序池关闭 .

这发生在运行 .NET framework v3.5 的 Windows 2008 服务器上。

我将问题缩小到 TransformFinalBlock()称呼。

注意:在 Cassini 上,我没有收到连接超时;而是抛出以下异常:
System.Security.Cryptography.CryptographicException: Bad Data

为其他字符串调用 Decrypt() 在任何环境中都不会导致问题。

为什么会这样?它是 TripleDESCryptoServiceProvider 中的错误吗?

显然,我可以过滤 cipherString 以拒绝“”并避免这个特定问题。但是,我担心其他一些我不怀疑的 cipherString 值会导致 DoS。

更新 2011.06.28

以下是重现该问题的最少代码:
// problem occurs when toEncryptArray is an empty array {}
byte[] toEncryptArray = {};

MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
byte[] keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes("dummy_key"));
hashmd5.Clear();

TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateDecryptor();

// the following line can crashes the ASP.NET Application Pool (may need to call multiple times).
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

tdes.Clear();

最佳答案

如上所述,问题在于解密逻辑无法正确处理输入密码是零长度数组的情况。

为此创建了一张票证:

http://connect.microsoft.com/VisualStudio/feedback/details/678150/denial-of-service-in-tripledescryptoserviceprovider

请注意,在运行 .NET framework 4.0 时它似乎可以正常工作。

关于encryption - TripleDESCryptoServiceProvider - 容易受到拒绝服务的攻击吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6446700/

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