1

Тема: AHK: Преобразование текста в хэш

Добрый вечер. Возможно ли по какому-то алгоритму представить определенный текст/ссылку в виде четырехзначного кода/хеш-суммы?

2

Re: AHK: Преобразование текста в хэш

Хешируется не строка, а данные (байты). Строку можно по-разному представить в виде байтов, в зависимости от кодировки. Результирующий хеш представлен не в виде какого-то количества знаков, а количества байтов, которое хеш занимает.
Пример простого хеширования:

string := "Hello, World!"
len := StrPutBuff(string, buf)
MsgBox % hashCode(&buf, len, 4)

hashCode(pData, dataLength, hashLength := 4) {
   size := 0
   Loop % hashLength
      size |= 0xFF << 8*(A_Index - 1)
   hash := 0
   Loop % dataLength
      hash := (31 * hash + *(pData + A_Index - 1)) & size
   Return hash
}

StrPutBuff(str, ByRef buff, encoding := "UTF-8") {
	VarSetCapacity(buff, len := (StrPut(str, encoding) - 1) << (encoding ~= "i)^(UTF-16|cp1200)$"))
	StrPut(str, &buff, encoding)
	Return len
}

Здесь хеш занимает 4 байта (последний параметр функции hashCode(). Можно его уменьшить, но с потерей уникальности.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder