前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CA1850:首选静态 HashData 方法,而非 ComputeHash

CA1850:首选静态 HashData 方法,而非 ComputeHash

作者头像
呆呆
发布于 2022-02-26 00:43:16
发布于 2022-02-26 00:43:16
48400
代码可运行
举报
文章被收录于专栏:centosDaicentosDai
运行总次数:0
代码可运行

规则 ID

CA1850

类别

“性能”

修复是中断修复还是非中断修复

非中断

原因

创建派生自 HashAlgorithm 的实例类型,用于调用其 ComputeHash 方法,并且该类型具有静态 HashData 方法。

规则说明

.NET 5 中引入了以下类型的静态 HashData 方法:

MD5

SHA1

SHA256

SHA384

SHA512

在只需对某些数据进行哈希处理的情况下,这些方法有助于简化代码。

使用这些静态 HashData 方法比创建和管理 HashAlgorithm 实例来调用 ComputeHash 更高效。

如何解决冲突

通常,通过更改代码以调用 HashData 并删除对 HashAlgorithm 实例的使用,即可修复规则。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public bool CheckHash(byte[] buffer)
{
  using (var sha256 = SHA256.Create())
  {
    byte[] digest = sha256.ComputeHash(buffer);
    return DoesHashExist(digest);
  }
}
Public Function CheckHash(buffer As Byte()) As Boolean
  Using sha256 As SHA256 = SHA256.Create()
    Dim digest As Byte() = sha256.ComputeHash(buffer)
    Return DoesHashExist(digest)
  End Using
End Function

可以将前面的代码更改为直接调用静态 HashData(Byte[]) 方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public bool CheckHash(byte[] buffer)
{
    byte[] digest = SHA256.HashData(buffer);
    return DoesHashExist(digest);
}
Public Function CheckHash(buffer As Byte()) As Boolean
  Dim digest As Byte() = SHA256.HashData(buffer)
  Return DoesHashExist(digest)
End Function

何时禁止显示警告

可禁止显示此规则的警告。

另请参阅

性能规则

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CA2305:请勿使用不安全的反序列化程序 LosFormatter
调用或引用了 System.Web.UI.LosFormatter 反序列化方法。
用户4268038
2022/02/20
3150
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
在软件开发领域,性能基准测试是确保软件系统高效、稳定运行的重要环节。它可以帮助你评估应用程序的性能,了解其在不同条件下的响应时间、吞吐量、资源利用率等。通过基准测试,你可以确定系统在处理特定工作负载时的性能表现。
郑子铭
2025/01/01
1750
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
CA1810:以内联方式初始化引用类型的静态字段
当一个类型声明显式静态构造函数时,实时 (JIT) 编译器会向该类型的每个静态方法和实例构造函数中添加一项检查,以确保之前已调用该静态构造函数。 访问任何静态成员或创建该类型的实例时,将触发静态初始化。 但是,如果声明一个类型的变量,但不使用它,则不会触发静态初始化;这在初始化会更改全局状态的情况下非常重要。
呆呆
2022/02/19
6670
.NET 9版本支持说明
在深入探讨.NET 9库的激动人心改进前,有必要了解微软对.NET版本的支持策略。
郑子铭
2025/04/24
1140
.NET 9版本支持说明
C#性能测试BenchmarkDotnet
在我们开发高性能代码时,需要各种针对性能优化进行编码。那么如何才能知道我们所加的代码是否有性能方面的正向优化呢?有了BenchmarkDotNet,做性能对比测试就非常容易了,只需要把你的测试方法加上特性[Benchmark], 想做不同.net平台的性能测试,比如传统的 .NET Framework, .NET Core,.NET 5 ~ 7,Mono,这些都没问题。
JusterZhu
2022/12/07
6070
C#性能测试BenchmarkDotnet
浅谈散列运算
“指纹”一词形象地描述了散列运算的结果。在现实生活中,两个人可能长得很像,但是他们的指纹不同,根据指纹就能对这两个人进行区分。
小蜜蜂
2019/07/24
1.2K0
浅谈散列运算
CA1846:首选 AsSpan 次选 Substring
对其中一个 String.Substring 重载的调用结果被传递给具有接受 ReadOnlySpan<Char> 的可用重载的方法。
呆呆
2022/02/26
9790
CA1841:首选字典包含方法
此规则可找到在 IDictionary<TKey,TValue> 的 Keys 或 Values 集合上对 Contains 方法的调用,这些调用可替换为在字典本身对 ContainsKey 或 ContainsValue 方法的调用。
呆呆
2022/02/26
3600
CA2329:不要使用不安全的配置反序列化 JsonSerializer
如果传递到反序列化方法或初始化为字段或属性的 Newtonsoft.Json.JsonSerializer 实例满足以下两个条件,则会触发此规则:
呆呆
2022/02/20
7710
CA2300:请勿使用不安全的反序列化程序 BinaryFormatte
调用或引用了 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 反序列化方法。
用户4268038
2022/02/20
5160
CA1044:属性不应是只写的
Get 访问器提供对属性的读取访问权限,而 set 访问器提供写入访问权限。 虽然可以接受且经常需要使用只读属性,但设计准则禁止使用只写属性。 这是因为允许用户设置值但又禁止该用户查看这个值不能提供任何安全性。 而且,如果没有读访问,将无法查看共享对象的状态,使其用处受到限制。
呆呆
2022/01/10
2180
CA2321:请勿使用 SimpleTypeResolver 对 JavaScriptSerializer 进行反序列化
使用 System.Web.Script.Serialization.SimpleTypeResolver 初始化后,调用或引用了 System.Web.Script.Serialization.JavaScriptSerializer 反序列化方法。
用户4268038
2022/02/20
1.3K0
CA2311:在未先设置 NetDataContractSerializer.Binder 的情况下,请不要反序列化
在未设置 Binder 属性的情况下调用或引用了 System.Runtime.Serialization.NetDataContractSerializer 反序列化方法。
用户4268038
2022/02/20
1.4K0
CA2119:密封满足私有接口的方法
可继承的公共类型为 internal(在 Visual Basic 中为 Friend)接口提供可重写的方法实现。
用户4268038
2022/02/20
3290
CA1033:接口方法应可由子类型调用
未密封的外部可见类型提供了显式实现公共接口的方法,但没有提供具有相同名称的其他外部可见方法。
用户4268038
2022/01/10
5290
CA3008:查看 XPath 注入漏洞的代码
处理不受信任的输入时,请注意防范 XPath 注入攻击。 使用不受信任的输入构造 XPath 查询可能会允许攻击者恶意控制查询,使其返回一个意外的结果,并可能泄漏查询的 XML 的内容。
呆呆
2022/02/20
8100
CA1052:静态容器类型应是 Static 或NotInheritable
非抽象类型只包含静态成员(可能的默认构造函数除外),而且没有使用 static 或 Shared 修饰符进行声明。
呆呆
2022/01/10
5410
CA1844:对“流”进行子分类时,提供异步方法的基于内存的重写
派生自 Stream 的类型会重写 ReadAsync(Byte[], Int32, Int32, CancellationToken),但不会重写 ReadAsync(Memory<Byte>, CancellationToken)。 或,派生自 Stream 的类型会重写 WriteAsync(Byte[], Int32, Int32, CancellationToken),但不会重写 WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)。
呆呆
2022/02/26
5560
CA1053:静态容器类型不应具有默认构造函数
规则 CA1053 仅适用于旧版 Visual Studio 代码分析。 在 .NET 代码质量分析器中,该规则已合并到规则 CA1052:静态容器类型应为 Static 或 NotInheritable 中。
呆呆
2022/01/10
4530
CA2315:请勿使用不安全的反序列化程序 ObjectStateFormatter
调用或引用了 System.Web.UI.ObjectStateFormatter 反序列化方法。
用户4268038
2022/02/20
4780
相关推荐
CA2305:请勿使用不安全的反序列化程序 LosFormatter
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档