Функция сравнения строк с постоянным временем
Для сравнения двух строк я сейчас использую 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;
}
Они не идеальны по времени, но должны быть более чем хороши для любой сети.