2017-07-25 81 views
0

要比較兩個字符串,我當前使用strcmp或其變體之一。但是,由於strcmp需要更長的時間,如果有更多的字符匹配,它很容易受到定時攻擊。 Windows上的標準庫中是否有恆定字符串比較函數?恆定字符串比較函數

+0

限制最大的字符串長度和填充零,同時積累差異在一個固定的循環可能嗎?或者我想你可能會嘗試計算字符串的加密哈希摘要並進行比較,以免放棄關於預先計算的數據庫密鑰內容的邊帶信息。我不知道如何有效地取消Windows上罕見字符串的緩存/分頁效果。 – doynax

回答

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

這些都不是完美的時機明智的,但對任何基於網絡的應用都應該足夠好。

+0

Downvote沒有評論是非常有幫助的 – Anders