2017-07-25 8 views
0

2つの文字列を比較するには、現在strcmpまたはその変形の1つを使用しています。しかし、より多くの文字が一致すると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