Хеш-функция one_at_time

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

aquaratixc

Программист-самоучка и программист-любитель

Добавить комментарий