Teste:
new val = hashString("abcde"), string[5], tempVal = 0; for(new a; a != 50000000; a++) { string[0] = random(255); string[1] = random(255); string[2] = random(255); string[3] = random(255); string[4] = random(255); tempVal = hashString(string); if(tempVal == val) printf("%d|%d", tempVal, val); } printf("%d", hashString("abc")); printf("%d", hashString("cba"));
Testei em udb hash e este hash, pareceu ser muito mais eficiente que aquele criado por draco blue, afinal não retornou nenhuma senha igual 50000000 tentativas em uma senha de 5 caracteres, logo que udb_hash, em menos de 4 caracteres encontra dezenas de senhas que retornassem o mesmo valor
Código
hashString(buffer[]) { new valueHash = 1; for(new x = 1; buffer[x]; ++x) { valueHash += (buffer[x] * 65535) - (buffer[x - 1]); } return ~(((valueHash * buffer[0]) >>> strlen(buffer)) % cellmax); }
Ele simplesmente vai adicionando (caractere atual * 65535) - caractere anterior
Depois na hora do retorno, faz um multiplica valueHash (obtido do calculo acima) com o primeiro caractere, assim dividindo por strlen(buffer) vezes por 2.
Para não estourar os números coloquei % cellmax, e para não ficar com números negativos coloquei ~.
Nenhum comentário:
Postar um comentário