Хеш-функция 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); }