【发布时间】:2015-10-06 03:10:57
【问题描述】:
一个比较简单的问题:
看来 C# 没有内置固定时间比较方法或扩展,为什么不呢?当然这是一个简单的算法,但它看起来很基础,应该包含在内。
通常不建议编写任何您自己的加密代码,但是似乎没有任何用于这种目的的库,我是否遗漏了一些?
【问题讨论】:
-
对于较小的值,您可以将 2 个值相互异或,并检查异或的输出是否为 0。对于较大的值或更大的灵活性,散列输入值并将其与散列进行异或期望值并检查是否为 0。这很简单,而且是常数时间。我不知道为什么它不是标准库的一部分。我同意应该是。 CryptoSecureEquals 或类似的东西。
-
问为什么 .Net 标准库以某种方式设计是题外话,因为这是高度自以为是的。您能否编辑您的问题以使其成为主题和可回答的问题,以便@WDS 可以发布正确的答案?
-
@WDS 对于长值,您可以简单地对单个字节进行二进制或异或运算。这就是我在加密库中所做的。
-
@ArtjomB:“我应该根据需要扩展它们,还是我错过了提供此类东西的第三方库?”,它就在那里,非常负责任。关于标准库的问题提供了上下文。
-
从 dotnet core 2.1 有System.Security.Cryptography.CryptographicOperations.FixedTimeEquals。
标签: .net algorithm cryptography