Тема: AHK: Преобразование текста в хэш
Добрый вечер. Возможно ли по какому-то алгоритму представить определенный текст/ссылку в виде четырехзначного кода/хеш-суммы?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Добрый вечер. Возможно ли по какому-то алгоритму представить определенный текст/ссылку в виде четырехзначного кода/хеш-суммы?
Хешируется не строка, а данные (байты). Строку можно по-разному представить в виде байтов, в зависимости от кодировки. Результирующий хеш представлен не в виде какого-то количества знаков, а количества байтов, которое хеш занимает.
Пример простого хеширования:
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(). Можно его уменьшить, но с потерей уникальности.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться