CA5350:请勿使用弱加密算法

属性
规则 ID CA5350
标题 请勿使用弱加密算法
类别 安全性
修复是中断修复还是非中断修复 非中断
在 .NET 8 中默认启用

注意

此警告上次更新于 2015 年 11 月。

原因

TripleDES 等加密算法和 SHA1RIPEMD160 等哈希算法被视为弱加密算法。

这些加密算法不能与更现代的对应算法提供同样多的安全保证。 与更现代的哈希算法相比,加密哈希算法 SHA1RIPEMD160 提供的冲突抗性较低。 与更现代的加密算法相比,加密算法 TripleDES 提供的安全位数更少。

规则说明

现今出于多种原因而使用弱加密算法和哈希函数,但不应将其用于保证其所保护数据的保密性。

该规则在代码中发现 3DES、SHA1 或 RIPEMD160 算法时将触发并向用户发送警告。

如何解决冲突

使用更强大的加密选项:

  • 对于 TripleDES 加密,请使用 Aes 加密。

  • 对于 SHA1 或 RIPEMD160 哈希函数,请从 SHA-2 系列(例如 SHA512SHA384SHA256)中选择使用。

何时禁止显示警告

当数据所需的保护级别不需要安全保证时,请禁止显示此规则的警告。

抑制警告

如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。

#pragma warning disable CA5350
// The code that's violating the rule is on this line.
#pragma warning restore CA5350

若要对文件、文件夹或项目禁用该规则,请在配置文件中将其严重性设置为 none

[*.{cs,vb}]
dotnet_diagnostic.CA5350.severity = none

有关详细信息,请参阅如何禁止显示代码分析警告

伪代码示例

到本文撰写时为止,下面的伪代码示例说明了此规则检测到的模式。

SHA-1 哈希冲突

using System.Security.Cryptography;
...
var hashAlg = SHA1.Create();

解决方案:

using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();

RIPEMD160 哈希冲突

using System.Security.Cryptography;
...
var hashAlg = RIPEMD160Managed.Create();

解决方案:

using System.Security.Cryptography;
...
var hashAlg = SHA256.Create();

TripleDES 加密冲突

using System.Security.Cryptography;
...
using (TripleDES encAlg = TripleDES.Create())
{
  ...
}

解决方案:

using System.Security.Cryptography;
...
using (AesManaged encAlg = new AesManaged())
{
  ...
}