为了比较两个字符串,我目前使用strcmp或其中一个变体。但是,因为如果更多字符匹配,strcmp会花费更长时间,因此很容易受到时序攻击。 Windows上的标准库中是否有常量字符串比较功能?
答案 0 :(得分:-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;
}
这些并不是完美的时间选择,但对于任何基于网络的东西都应该足够好。