CHAT MAIOR

30 de ago. de 2011

[COD] Hash Eficiente e Simples

Aqui um bom método de hash, pelo menos pareceu ser funcional, apenas coloquei uns cálculos loucos que ficavam tudo a base do primeiro caracter e do caractere anterior

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