Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Модуль digest

Общие сведения

«Дайджест» (digest) — это значение, возвращаемое функцией (обычно криптографической хеш-функцией), примененной к строке. Модуль digest в Tarantool поддерживает несколько типов криптографических хеш-функций ( AES, MD4, MD5, SHA-1, SHA-2, PBKDF2), а также функцию контрольной суммы (CRC32), две функции для base64 и две некриптографические хеш-функции (guava, murmur). Некоторые функции дайджеста также доступны в модуле crypto.

Указатель

Ниже приведен перечень всех функций модуля digest.

Имя

Назначение

digest.aes256cbc.encrypt()

Шифрование строки с помощью AES

digest.aes256cbc.decrypt()

Расшифровка строки с помощью AES

digest.md4()

Получение дайджеста с помощью MD4

digest.md4_hex()

Получение шестнадцатеричного дайджеста с помощью MD4

digest.md5()

Получение дайджеста с помощью MD5

digest.md5_hex()

Получение шестнадцатеричного дайджеста с помощью MD5

digest.pbkdf2()

Получение дайджеста с помощью PBKDF2

digest.sha1()

Получение дайджеста с помощью SHA-1

digest.sha1_hex()

Получение шестнадцатеричного дайджеста с помощью SHA-1

digest.sha224()

Получение 224-битного дайджеста с помощью SHA-2

digest.sha224_hex()

Получение 56-байтового шестнадцатеричного дайджеста с помощью SHA-2

digest.sha256()

Получение 256-битного дайджеста с помощью SHA-2

digest.sha256_hex()

Получение 64-байтового шестнадцатеричного дайджеста с помощью SHA-2

digest.sha384()

Получение 384-битного дайджеста с помощью SHA-2

digest.sha384_hex()

Получение 96-байтового шестнадцатеричного дайджеста с помощью SHA-2

digest.sha512()

Получение 512-битного дайджеста с помощью SHA-2

digest.sha512_hex()

Получение 128-байтового шестнадцатеричного дайджеста с помощью SHA-2

digest.base64_encode()

Кодирование строки в Base64

digest.base64_decode()

Декодирование строки, закодированной в Base64

digest.urandom()

Получение массива случайных байтов

digest.crc32()

Получение 32-битной контрольной суммы с помощью CRC32

digest.crc32.new()

Инициация инкрементального вычисления CRC32

digest.guava()

Получение числа с помощью консистентного хеширования

digest.murmur()

Получение дайджеста с помощью MurmurHash

digest.murmur.new()

Инициация инкрементального вычисления MurmurHash

digest.aes256cbc.encrypt(string, key, iv)

digest.aes256cbc.decrypt(string, key, iv)

Возврат 256-битной двоичной строки = дайджест, полученный с помощью AES.

digest.md4(string)

Возврат 128-битной двоичной строки = дайджест, полученный с помощью MD4.

digest.md4_hex(string)

Возврат 32-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью MD4.

digest.md5(string)

Возврат 128-битной двоичной строки = дайджест, полученный с помощью MD5.

digest.md5_hex(string)

Возврат 32-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью MD5.

digest.pbkdf2(string, salt [, iterations [, digest-length]])

Возврат двоичной строки = дайджест, полученный с помощью PBKDF2. Для эффективности шифрования значение параметра количества итераций iterations должно быть как минимум несколько тысяч. Значение параметра digest-length определяет длину полученной двоичной строки.

digest.sha1(string)

Возврат 160-битной двоичной строки = дайджест, полученный с помощью SHA-1.

digest.sha1_hex(string)

Возврат 40-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью SHA-1.

digest.sha224(string)

Возврат 224-битной двоичной строки = дайджест, полученный с помощью SHA-2.

digest.sha224_hex(string)

Возврат 56-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью SHA-224.

digest.sha256(string)

Возврат 256-битной двоичной строки = дайджест, полученный с помощью SHA-2.

digest.sha256_hex(string)

Возврат 64-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью SHA-256.

digest.sha384(string)

Возврат 384-битной двоичной строки = дайджест, полученный с помощью SHA-2.

digest.sha384_hex(string)

Возврат 96-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью SHA-384.

digest.sha512(string)

Возврат 512-битной двоичной строки = дайджест, полученный с помощью SHA-2.

digest.sha512_hex(string)

Возврат 128-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью SHA-512.

digest.base64_encode(string[, options])

Возврат кодированного по base64 значения обычной строки.

Возможные опции:

  • nopad – результат не должен содержать '=' для дополнения в конце,
  • nowrap – результат не должен содержать символы перевода строки для разбиения строк после 72 символов,
  • urlsafe – результат не должен содержать '=' или символ перевода строки и может содержать '-' или '_' вместо '+' или '/' для позиций 62 и 63 в таблице индексов.

Значения параметров могут быть true (правда) или false (ложь), по умолчанию используется false.

Пример:

digest.base64_encode(string_variable,{nopad=true})

digest.base64_decode(string)

Возврат обычной строки из кодированного по base64 значения.

digest.urandom(integer)

Возврат массива случайных байтов с длиной = целому числу.

digest.crc32(string)

Возврат 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).

digest.crc32.new()

Запуск инкрементного вычисления CRC32. См. примечания по инкрементным методам.

digest.guava(state, bucket)

Возврат числа с помощью консистентного хеширования.

Функция guava использует алгоритм Consistent Hashing (консистентного хеширования) из библиотеки Google guava. Первый параметр — хеш-код; второй параметр — количество корзин; возвращаемое значение — целое число от 0 до количества корзин. Например:

tarantool> digest.guava(10863919174838991, 11)---- 8...

digest.murmur(string)

Возврат 32-битной двоичной строки = дайджест, полученный с помощью MurmurHash.

digest.murmur.new([opts])

Запуск инкрементного вычисления с помощью 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'...