Приложение 3: FNV хэш-функции

Приложение 3: FNV хэш-функции
Автор: AnriRS

Статьи по теме

Краткий обзор

FNV (англ. Fowler–Noll–Vo) – семейство простых некриптографических хэш-функций общего применения, в The Sims 3 FNV-функции используются в различных ресурсах игры в виде 32-разрядной или 64-разрядной форм для генерации идентификаторов свойств, экземпляров записей, костей и т.п. Изредка используется 24-разрядый хэш, который вычисляется как 32-разрядый хэш, а затем старший байт отбрасывается, а младший складывается по "исключающему или" (xor) со старшим.

Описание алгоритма

Реализация функции хэширования проста, ее реализация – берется некое начальное число, а затем последовательно для каждого байта данных умножается на простое число и складывается (xor-ится) с ними по модулю 2.

Когда хэшируются строки, их символы вначале конвертируются в нижний регистр (в прописные), в связи с этим связана невозможность использования кириллицы в них.

component_library_8

Примеры реализации алгоритмов FNV хэширования для строк и массивов байт:

function FNV64(s: string): UInt64;
// вычисляет FNV64 для ASCII строки
const
mul: UInt64 = $00000100000001B3;
var
i, l: integer;
b: byte;
begin
result:= $CBF29CE484222325;
s:= LowerCase(s);
l:= Length(s);
for i:= 1 to l do begin
b:= ord(s[i]);
result:= (result*mul) xor b;
end
end;
function FNV32(a: TBytes): DWORD; overload;
// вычисляет FNV32 для массива байт
const
mul: DWORD = $01000193;
var
i: integer;
begin
result:= $811C9DC5;
for i:= 0 to High(a) do
result:= (result*mul) xor a[i];
end;

The Sims 3

The Sims 2

The Sims

MySims

Sims-игры

Даты релизов

the_sims_3_store_saleshymn_bunnersimovod_3simovod2Журнал «Симовод»Prosims - магазин сувениров