Модуль digest
«Дайджест» (digest) — это значение, возвращаемое функцией (обычно
криптографической
хеш-функцией),
примененной к строке. Модуль digest в Tarantool поддерживает несколько
типов криптографических хеш-функций (
AES,
MD4,
MD5,
SHA-1,
SHA-2,
PBKDF2), а также функцию
контрольной суммы
(CRC32), две
функции для base64 и две
некриптографические хеш-функции
(guava,
murmur). Некоторые функции
дайджеста также доступны в модуле crypto.
Ниже приведен перечень всех функций модуля digest.
Имя | Назначение |
|---|---|
Шифрование строки с помощью AES | |
Расшифровка строки с помощью AES | |
Получение дайджеста с помощью MD4 | |
Получение шестнадцатеричного дайджеста с помощью MD4 | |
Получение дайджеста с помощью MD5 | |
Получение шестнадцатеричного дайджеста с помощью MD5 | |
Получение дайджеста с помощью PBKDF2 | |
Получение дайджеста с помощью SHA-1 | |
Получение шестнадцатеричного дайджеста с помощью SHA-1 | |
Получение 224-битного дайджеста с помощью SHA-2 | |
Получение 56-байтового шестнадцатеричного дайджеста с помощью SHA-2 | |
Получение 256-битного дайджеста с помощью SHA-2 | |
Получение 64-байтового шестнадцатеричного дайджеста с помощью SHA-2 | |
Получение 384-битного дайджеста с помощью SHA-2 | |
Получение 96-байтового шестнадцатеричного дайджеста с помощью SHA-2 | |
Получение 512-битного дайджеста с помощью SHA-2 | |
Получение 128-байтового шестнадцатеричного дайджеста с помощью SHA-2 | |
Кодирование строки в Base64 | |
Декодирование строки, закодированной в Base64 | |
Получение массива случайных байтов | |
Получение 32-битной контрольной суммы с помощью CRC32 | |
Инициация инкрементального вычисления CRC32 | |
Получение числа с помощью консистентного хеширования | |
Получение дайджеста с помощью MurmurHash | |
Инициация инкрементального вычисления MurmurHash |
Возврат 256-битной двоичной строки = дайджест, полученный с помощью AES.
Возврат 128-битной двоичной строки = дайджест, полученный с помощью MD4.
Возврат 32-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью MD4.
Возврат 128-битной двоичной строки = дайджест, полученный с помощью MD5.
Возврат 32-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью MD5.
Возврат двоичной строки = дайджест, полученный с помощью PBKDF2. Для
эффективности шифрования значение параметра количества итераций
iterations должно быть как минимум несколько тысяч. Значение параметра
digest-length определяет длину полученной двоичной строки.
Возврат 160-битной двоичной строки = дайджест, полученный с помощью SHA-1.
Возврат 40-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью SHA-1.
Возврат 224-битной двоичной строки = дайджест, полученный с помощью SHA-2.
Возврат 56-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью SHA-224.
Возврат 256-битной двоичной строки = дайджест, полученный с помощью SHA-2.
Возврат 64-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью SHA-256.
Возврат 384-битной двоичной строки = дайджест, полученный с помощью SHA-2.
Возврат 96-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью SHA-384.
Возврат 512-битной двоичной строки = дайджест, полученный с помощью SHA-2.
Возврат 128-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью SHA-512.
Возврат кодированного по base64 значения обычной строки.
Возможные опции:
nopad– результат не должен содержать '=' для дополнения в конце,nowrap– результат не должен содержать символы перевода строки для разбиения строк после 72 символов,urlsafe– результат не должен содержать '=' или символ перевода строки и может содержать '-' или '_' вместо '+' или '/' для позиций 62 и 63 в таблице индексов.
Значения параметров могут быть true (правда) или false (ложь), по
умолчанию используется false.
Пример:
digest.base64_encode(string_variable,{nopad=true})
Возврат обычной строки из кодированного по base64 значения.
Возврат массива случайных байтов с длиной = целому числу.
Возврат 32-битной контрольной суммы с помощью CRC32.
Функции crc32 и crc32_update используют значение полинома
Cyclic Redundancy
Check
(циклического избыточного кода): 0x1EDC6F41 / 4812730177.
(Остальные настройки: input = reflected, output = reflected, initial
value = 0xFFFFFFFF, final xor value = 0x0.) Если требуется
совместимость с функциями контрольной суммы в других языках
программирования, необходимо убедиться, что эти функции используют то же
значение полинома.
Например, в Python установите пакет crcmod и введите команду:
>>> import crcmod>>> fun = crcmod.mkCrcFun('4812730177')>>> fun('string')3304160206L
В Perl установите модуль Digest::CRC и выполните следующий код:
use Digest::CRC;$d = Digest::CRC->new(width => 32, poly => 0x1EDC6F41, init => 0xFFFFFFFF, refin => 1, refout => 1);$d->add('string');print $d->digest;
(ожидается выходное значение: 3304160206).
Запуск инкрементного вычисления CRC32. См. примечания по инкрементным методам.
Возврат числа с помощью консистентного хеширования.
Функция guava использует алгоритм Consistent Hashing (консистентного хеширования) из библиотеки Google guava. Первый параметр — хеш-код; второй параметр — количество корзин; возвращаемое значение — целое число от 0 до количества корзин. Например:
tarantool> digest.guava(10863919174838991, 11)---- 8...
Возврат 32-битной двоичной строки = дайджест, полученный с помощью MurmurHash.
Запуск инкрементного вычисления с помощью MurmurHash. См. примечания по инкрементным методам. Например:
murmur.new({seed=0})
Предположим, что вычислен дайджест для строки 'A', затем часть 'B' добавляется в строку, необходим новый дайджест. Новый дайджест можно пересчитать для всей строки 'AB', но быстрее будет взять вычисленный дайджест для 'A' и внести изменения на основании добавленной части 'B'. Это называется многошаговым процессом или "инкрементным" хеш-суммированием, которое Tarantool поддерживает для crc32 и murmur:
digest = require('digest')-- print crc32 of 'AB', with one step, then incrementallyprint(digest.crc32('AB'))c = digest.crc32.new()c:update('A')c:update('B')print(c:result())-- print murmur hash of 'AB', with one step, then incrementallyprint(digest.murmur('AB'))m = digest.murmur.new()m:update('A')m:update('B')print(m:result())
В приведенном ниже примере пользователь создает две функции:
password_insert(), которая вставляет дайджест
SHA-1 слова "^S^e^c^ret
Wordpass" в набор кортежей, и password_check(), которая требует ввода
пароля.
tarantool> digest = require('digest')---...tarantool> function password_insert()> box.space.tester:insert{1234, digest.sha1('^S^e^c^ret Wordpass')}> return 'OK'> end---...tarantool> function password_check(password)> local t = box.space.tester:select{12345}> if digest.sha1(password) == t[2] then> return 'Password is valid'> else> return 'Password is not valid'> end> end---...tarantool> password_insert()---- 'OK'...
Если затем пользователь вызовет функцию password_check() и вводит
неверный пароль, результатом будет ошибка.
tarantool> password_check('Secret Password')---- 'Password is not valid'...