Хеш-функция one_at_time входит в семейство не криптографических хеш-функций общего назначения для ключей переменной длины разработанных Бобом Дженкинсом. Впервые описание функции было опубликовано в 1997 году.
Алгоритм функции на D:
auto oneAtTime(ubyte[] data)
{
uint hash;
foreach (e; data)
{
hash += e;
hash += (hash << 10);
hash ^= (hash >> 6);
}
hash += (hash << 3);
hash ^= (hash >> 11);
hash += (hash << 15);
return hash;
}Использование:
import std.stdio;
void main()
{
auto hashed(string s)
{
import std.string : representation;
return s.representation.dup;
}
writefln(`%0.2x`, hashed(`abc`).oneAtTime);
writefln(`%0.2x`, hashed(`bac`).oneAtTime);
writefln(`%0.2x`, hashed(`bca`).oneAtTime);
writefln(`%0.2x`, hashed(`cba`).oneAtTime);
writefln(`%0.2x`, hashed(`cab`).oneAtTime);
writefln(`%0.2x`, hashed(`acb`).oneAtTime);
}