1

为了比较两个字符串,我目前使用 strcmp 或其变体之一。但是,因为如果匹配更多字符,strcmp 需要更长的时间,因此很容易受到定时攻击。Windows 标准库中是否有常量时间字符串比较函数?

4

1 回答 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 回答