2011-01-06 4 views
2

私は古いゲームで使用されるアーカイブ・ファイル・フォーマットリバースエンジニアリングし、それは(手で逆コンパイル)次の関数を使用してファイル名をハッシュ化されたことを発見:このハッシュ関数とは何ですか?

int hash(char* filename) { 
    unsigned int a = 0; 
    int b = 0; 
    for(int i = strlen(filename)-1; i>=0; i--) 
    char c = toupper(filename[i]); 
    a=(a<<5)+(a>>25); 
    b+=c; 
    a+=b+c; 
    } 
    return a; 
} 

これは、標準のものである場合、私は思ったんだけど、またはそれが開発者によってランダムに選択されたものである場合。

+0

ゲームは何年ですか?かなり現代的な乱数生成関数は同じ考え方に基づいています –

+0

Shift-Add-XORハッシュと似ていますが、XORingの代わりに追加が追加されています。いくつかの既存のハッシュアルゴリズムのためのhttp://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx#existingを参照してください。 – Christoph

+0

私には古いサムスン文字列ハッシュ関数のように見えます。 'a << 5^a >> 27'がよく見られます。 – leppie

答えて

2

標準のハッシュ関数を表すものではなく、単純な「手作り」です。

関連する問題