Предыдущие версии
Название | Размер | Обновлено | Версия игры | Загрузок | |
1.0.0 release | 18.34 KB | May 14, 2020 | 8.3.0 | 38 | Скачать |
Описание
Lib: Хэш
Описание
Эта библиотека предоставляет функции для расчета дайджеста сообщений.
Эта библиотека представляет собой порт на чистомЛуаша модуль выступил Егор Skriptunoff: на GitHub проекта
Поддерживаемые хэши:
Луа
АЛГОРИТМ MD5 -- ЛГ.MD5(сообщение)
SHA-1 -- LH. sha1(сообщение)
-- SHA2
SHA-224 -- LH. sha224 (сообщение)
SHA-256 -- LH. sha256(сообщение)
SHA-384 -- LH. sha384 (сообщение)
SHA-512 -- LH. sha512(сообщение)
АЛГОРИТМ SHA-512/224 -- ЛГ.sha512_224(сообщение)
АЛГОРИТМ SHA-512/256 -- ЛГ.sha512_256(сообщение)
-- SHA3
SHA3-224 -- ЛГ.sha3_224(сообщение)
SHA3-256 -- ЛГ.sha3_256(сообщение)
SHA3-384 -- ЛГ.sha3_384(сообщение)
SHA3-512 -- ЛГ.sha3_512(сообщение)
SHAKE128 -- ЛГ.shake128(digest_size_in_bytes, сообщение)
SHAKE256 -- ЛГ.shake256(digest_size_in_bytes, сообщение)
-- HMAC (применимо к любой хэш-функции из этого модуля, кроме SHAKE)
КСОМ -- ЛГ.HMAC(сокращение от англ ЛГ.any_hash_func, ключ, сообщение)
Использование
Входные данные должны быть представлены в виде двоичной строки: либо в виде целой строки, либо в виде последовательности подстрок (загрузка по частям).
Результат (SHA digest) возвращается в шестнадцатеричном представлении (в виде строки строчных шестнадцатеричных цифр).
Простейший пример использования:
Луа
local LH = LibStub ("LibHash-1.0")
local your_hash = LH. sha256 ("ваша строка")
-- assert(your_hash = = " d14d691dac70eada14d9f23ef80091bca1c75cf77cf1cd5cf2d04180ca0d9911")
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
- Вопрос: Как получить дайджест SHA в виде двоичной строки вместо шестнадцатеричного представления?
- Один:
Используйте функциюLH. hex2bin()
для преобразования шестнадцатеричного кода в двоичный:
Луа
local LH = LibStub ("LibHash-1.0")
local binary_hash = LH. hex2bin(LH. sha256 ("ваша строка"))
-- assert(binary_hash = = "\209Mi\29\172p\234\218\20\217\242>\248\0\145\188\161\199\\\247|\241\205\\\242\208A\128\202\r\153\17")
- Вопрос: Как получить SHA digest в виде строки base64?
- Один:
Есть функцииЛГ.bin2base64()
иЛГ.base642bin()
для преобразования между двоичной и base64:
Луа
local LH = LibStub ("LibHash-1.0")
local binary_hash = LH. hex2bin(LH. sha256 ("ваша строка"))
местные base64_hash = ЛГ.bin2base64(binary_hash)
-- assert(base64_hash == "0U1pHaxw6toU2fI++ACRvKHHXPd88c1c8tBBgMoNmRE=")
- Вопрос: Как рассчитать SHA-дайджест длинного потока данных?
- Один:
Луа
local LH = LibStub ("LibHash-1.0")
местные дописывать = ЛГ.и SHA256() -- если аргумент "сообщение" не указан, то "добавление функции" возвращается
добавить("код")
добавить(" ст") - вы должны пройти все части вашего длинного сообщения "добавление функции" (кусок-на-кусок)
добавить("кольцо")
local your_hash = append () -- и, наконец, запросите результат (вызвав функцию "append" без аргумента)
-- assert(your_hash = = " d14d691dac70eada14d9f23ef80091bca1c75cf77cf1cd5cf2d04180ca0d9911")
- Вопрос: Как рассчитать HMAC-SHA1, HMAC-SHA256 и т. д. ?
- Один:
Луа
-- Расчет HMAC-SHA1
local LH = LibStub ("LibHash-1.0")
местные your_hmac = ЛГ.HMAC(сокращение от англ ЛГ.SHA1 и "ключ", "ваше сообщение")
-- assert(your_hmac == "317d0dfd868a5c06c9444ac1328aa3e2bfd29fb2")
То же самое в режиме chunk-by-chunk (для длинных сообщений):
Луа
local LH = LibStub ("LibHash-1.0")
местные дописывать = ЛГ.HMAC(сокращение от англ ЛГ.SHA1 и "ваш ключ")
добавить("код")
append ("беспорядок")
append ("возраст")
local your_hmac = добавить()
-- assert(your_hmac == "317d0dfd868a5c06c9444ac1328aa3e2bfd29fb2")
- Вопрос: Можно ли использовать SHAKE128/SHAKE256 для генерации дайджеста бесконечной длины ?
- Один:
Да!
Например, вы можете преобразовать свой пароль в бесконечный поток псевдослучайных байтов.
Установитеdigest_size_in_bytes
взначение -1
и получите функциюget_next_part (part_size_in_bytes)
.
Вызывайте эту функцию несколько раз, чтобы получить последовательные части бесконечного дайджеста.
Луа
local LH = LibStub ("LibHash-1.0")
местные get_next_part_of_digest = ЛГ.shake128(-1, "быстрая коричневая лиса прыгает через ленивую собаку")
утверждаю(get_next_part_of_digest(5) == "f4202e3c58") -- 5 байт в шестнадцатеричном представлении
утверждаю(get_next_part_of_digest() == "52") - размер=1 принимается, когда опущен
утверждаю(get_next_part_of_digest(0) == "") -- размер=0 имеет действительный размер
утверждаю(get_next_part_of_digest(4) == "f9182a04") - и так далее до бесконечности...
-- Примечание: Вы можете использовать LH.hex2bin() для преобразования этих шестнадцатеричных частей в двоичные строки
-- По определению, результатом встряски с конечным "digest_size_in_bytes" является просто конечный префикс " infinite digest":
утверждаю(ЛГ.shake128(4, "быстрая коричневая лиса прыгает через ленивую собаку")) == "f4202e3c")
Для встряхивания можно комбинировать режим ввода «кусок за куском » с режимом вывода» кусок за куском».:
Луа
local LH = LibStub ("LibHash-1.0")
местные append_input_message = ЛГ.shake128(-1)
append_input_message ("быстрая бурая лиса")
append_input_message ("перепрыгивает через")
append_input_message ("ленивая собака")
локальный get_next_part_of_digest = append_input_message () -- входной поток завершен, теперь мы можем начать получать выходной поток
assert (get_next_part_of_digest(5) = = "f4202e3c58")
assert(get_next_part_of_digest(5) = = "52f9182a04") -- и так далее...
Добавить комментарий