Skip to content

Instantly share code, notes, and snippets.

@brbsh
Created May 15, 2013 14:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save brbsh/5584437 to your computer and use it in GitHub Desktop.
Save brbsh/5584437 to your computer and use it in GitHub Desktop.
New hash algorithm (written in PAWN)
/*
Функция для получения хеш-суммы строки
B_Hash(source[], dest[], bool:lowcase = true);
Аргументы:
source[] - строка, хеш-сумму которой нужно получить
dest[] - строка, куда будет помещена хеш-сумма (96 символов)
bool:lowcase (true/false) - если true, вывод - в нижнем регистре, иначе - в верхнем
Возвращает:
0 - Неудача
1 - Успех
*/
stock B_Hash(source[], dest[], bool:lowcase = true, dest_size = sizeof(dest))
{
if(dest_size < 96) return 0;
dest[0] = 0;
new iter, table_iter, len = strlen(source);
new table[32] =
{
0xF3C, 0xA1B, 0x84C, 0x7A0,
0x31A, 0x8C1, 0xDD7, 0xFF6,
0x371, 0x20C, 0xCC4, 0xD8C,
0x7FF, 0x531, 0x6C9, 0xF48,
0xBA8, 0x4F1, 0x3C3, 0x519,
0x1CB, 0x6AA, 0x4F0, 0xC02,
0x1A1, 0x911, 0xE9E, 0x565,
0xDCC, 0x5FE, 0x113, 0x3EE
};
if(!len) goto NULL;
while(table_iter != 32)
{
iter = 0;
for( ; source[iter] != 0x0; iter++)
{
source[iter] += ((source[iter] + (iter << 16)) >>> 21);
table[table_iter] += (iter - ((((source[iter] % 262144) + ((source[iter] << 1) - (iter % 256))) >>> 24) - ((len << 1) + ((source[iter] - len) % (65535 + iter)) + (len - (34 + iter)))));
table[table_iter] ^= (((source[iter] >>> 1) + (table_iter - len)) << 1);
table[table_iter] >>>= 1;
table[table_iter] ^= ((source[iter] << 2) - 32);
table[table_iter] -= ((table_iter + 347) - iter);
source[iter] += ((table_iter + len) << 2);
}
table[table_iter++] &= 0xFFF;
}
NULL:
source[0] = 0;
iter = 0;
table_iter = 31;
format(dest,dest_size,"%03x",table[table_iter--]);
while(iter++ != 31)
{
format(dest,dest_size,"%s%03x",dest,table[table_iter--]);
}
if(lowcase)
{
for(iter = 0; dest[iter] != 0x0; iter++)
{
dest[iter] |= 0x20;
}
}
return 1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment