.NET 9 Preview 1 支持 HashAlgorithm 的 one-shot Hash

💡 原文中文,约5900字,阅读约需14分钟。
📝

内容提要

.NET 9 Preview 1引入了一种新的API,用于使用指定算法进行快速哈希。它包括直接哈希计算(HashData)和HMAC计算(HmacData)的方法。支持的算法包括MD5、SHA1、SHA256、SHA3等。文章提供了比较不同哈希算法结果的示例代码。该API还支持异步方法和字节数组、流和跨度的输入/输出。

🔎

延伸解读

动态哈希算法带来的代码简化

新 API 允许通过 HashAlgorithmName 参数在运行时指定哈希算法,这意味着你可以根据配置或用户设置动态选择算法,而无需编写多个 if-else 分支或反射代码。例如,在需要支持多种哈希算法的场景中,只需传递不同的枚举值即可,大大简化了代码结构,提高了可维护性。

HMAC 与普通哈希的区别及应用

HmacData 方法需要额外的密钥参数,生成基于密钥的哈希消息认证码,比普通哈希具有更强的抗碰撞性和安全性。文章提到 TOTP(基于时间的一次性密码)算法就是基于 HMAC 实现的。因此,在需要验证数据完整性和真实性的场景中,应优先使用 HmacData 而非 HashData。

SHA3 系列算法的支持

除了常见的 MD5、SHA1、SHA256 等算法,新 API 还支持更安全的 SHA3 系列算法,包括 SHA3_256、SHA3_384 和 SHA3_512。SHA3 是新一代哈希标准,具有更高的安全性和抗量子计算潜力。如果你的应用需要更高的安全保证,可以考虑使用 SHA3 系列算法。

灵活的输入输出与异步支持

新 API 不仅支持字节数组和 ReadOnlySpan 输入,还支持从 Stream 读取数据,并可以将结果输出到 Span 中,避免不必要的内存分配。同时提供了异步方法(如 HashDataAsync),适合处理大文件或网络流等 I/O 密集型场景。你可以根据实际需求选择最合适的重载。

❓

Q&A

.NET 9 Preview 1 中新增的哈希 API 是什么?

在 .NET 9 Preview 1 中,CryptographicOperations 类新增了 HashData 和 HmacData 方法,允许通过指定 HashAlgorithmName 来快速计算哈希或 HMAC。

HashData 和 HmacData 有什么区别?

HashData 直接计算哈希,而 HmacData 需要额外的密钥参数,提供更强的抗碰撞性,常用于 TOTP 等算法。

新的哈希 API 支持哪些哈希算法?

支持 MD5、SHA1、SHA256、SHA384、SHA512 以及更安全的 SHA3 系列(SHA3_256、SHA3_384、SHA3_512)。

如何使用新的哈希 API 计算 SHA256 哈希?

可以调用 CryptographicOperations.HashData(HashAlgorithmName.SHA256, bytes),其中 bytes 是 ReadOnlySpan<byte> 或 byte[]。

新的哈希 API 支持异步操作吗?

支持,提供了 HashDataAsync 和 HmacDataAsync 方法,可以异步处理 Stream 输入。

新的哈希 API 支持哪些输入和输出类型?

支持字节数组、ReadOnlySpan<byte>、Stream 作为输入,输出可以是 byte[] 或 Span<byte>,并支持异步。

🏷️

标签

➡️

继续阅读