0
要比較兩個字符串,我當前使用strcmp或其變體之一。但是,由於strcmp需要更長的時間,如果有更多的字符匹配,它很容易受到定時攻擊。 Windows上的標準庫中是否有恆定字符串比較函數?恆定字符串比較函數
要比較兩個字符串,我當前使用strcmp或其變體之一。但是,由於strcmp需要更長的時間,如果有更多的字符匹配,它很容易受到定時攻擊。 Windows上的標準庫中是否有恆定字符串比較函數?恆定字符串比較函數
我不認爲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;
}
這些都不是完美的時機明智的,但對任何基於網絡的應用都應該足夠好。
Downvote沒有評論是非常有幫助的 – Anders
限制最大的字符串長度和填充零,同時積累差異在一個固定的循環可能嗎?或者我想你可能會嘗試計算字符串的加密哈希摘要並進行比較,以免放棄關於預先計算的數據庫密鑰內容的邊帶信息。我不知道如何有效地取消Windows上罕見字符串的緩存/分頁效果。 – doynax