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 해시와 비슷하지만 XOR 대신 추가가 추가됩니다. 일부 기존 해시 알고리즘에 대한 http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx#existing을 참조하십시오. – Christoph

+0

나에게 오래된 엄지 손가락으로 묶인 문자열 해시 함수처럼 보입니다. 'a << 5^a >> 27'은 꽤 흔하게 볼 수 있습니다. – leppie

답변

2

표준 해시 함수를 나타내는 것이 아니라 단순한 '수작업'입니다.