Функция сравнения строк с постоянным временем

Для сравнения двух строк я сейчас использую strcmp или один из его вариантов. Однако, поскольку strcmp занимает больше времени, если совпадает больше символов, он уязвим для временных атак. Есть ли функция сравнения строк с постоянным временем в стандартной библиотеке Windows?

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;
}

Они не идеальны по времени, но должны быть более чем хороши для любой сети.

Другие вопросы по тегам