为了比较两个字符串,我目前使用 strcmp 或其变体之一。但是,因为如果匹配更多字符,strcmp 需要更长的时间,因此很容易受到定时攻击。Windows 标准库中是否有常量时间字符串比较函数?
问问题
643 次
1 回答
-1
我认为 Windows 和 Visual Studio 都没有这样的功能。
至少对于像 strcmp 这样简单的东西,您可以自己动手做一些事情。
如果你只关心平等:
int strctcmp(const char*a, const char*b)
{
int r = 0;
for (; *a && *b; ++a, ++b)
{
r |= *a != *b;
}
return r;
}
如果您需要可排序的结果并且需要处理所有最长的字符串:
int strctcmp(const char*a, const char*b)
{
int r = 0, c;
for (;;)
{
c = *a - *b;
if (!r) r = c;
if (!*a && !*b) break;
if (*a) ++a;
if (*b) ++b;
}
return r;
}
这些在时间方面并不完美,但对于任何基于网络的东西来说应该已经足够好了。
于 2017-07-25T16:34:15.147 回答