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

Модуль crypto

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

«Crypto» — сокращение от «Cryptography» (криптография), что обычно относится к получению значения дайджеста с помощью функции (обычно криптографической хеш-функции), применяемой к строке. Модуль crypto в Tarantool поддерживает десять типов криптографических хеш-функций (AES, DES, DSS, MD4, MD5, MDC2, RIPEMD, SHA-1, SHA-2). Некоторые криптографические функции также доступны в модуле digest.

Указатель

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

Имя

Назначение

crypto.cipher.{algorithm}.{cipher_mode}.encrypt()

Шифрование строки

crypto.cipher.{algorithm}.{cipher_mode}.decrypt()

Расшифровка строки

crypto.digest.{algorithm}()

Получение дайджеста

crypto.hmac.{algorithm}()

Получение хеш-ключа

crypto.cipher

crypto.cipher.<algorithm>.<cipher_mode>.encrypt(string, key, initialization_vector)crypto.cipher.<algorithm>.<cipher_mode>.decrypt(string, key, initialization_vector)

Передача или возврат шифрованного сообщения, полученного из строки, ключа и (необязательно) вектора инициализации.

Параметры:

  • string (string) — строка для шифрования или расшифровки
  • key (string) — ключ шифрования
  • initialization_vector (string) — вектор инициализации (необязательный параметр)

<algorithm> — один из четырёх алгоритмов шифрования:

  • aes128 — aes-128 (с 128-битными бинарными строками с использованием AES)
  • aes192 — aes-192 (с 192-битными бинарными строками с использованием AES)
  • aes256 — aes-256 (с 256-битными бинарными строками с использованием AES)
  • des — des (с 56-битными бинарными строками с использованием DES, хотя DES не рекомендуется)

<cipher_mode> — один из четырёх режимов блочного шифрования:

  • cbc — сцепление блоков шифра
  • cfb — обратная связь по шифротексту
  • ecb — электронная кодовая книга
  • ofb — обратная связь по выходу

Подробнее см. в статье о режимах шифрования.

Возвращает

шифрованную или расшифрованную строку

Тип возвращаемого значения

string

Пример:

_16byte_iv='1234567890123456'_16byte_pass='1234567890123456'e=crypto.cipher.aes128.cbc.encrypt('string', _16byte_pass, _16byte_iv)crypto.cipher.aes128.cbc.decrypt(e,  _16byte_pass, _16byte_iv)

crypto.digest

crypto.digest.<algorithm>(string)

Передача или возврат дайджеста из строки.

Параметры:

  • string (string) — строка, для которой вычисляется дайджест

<algorithm> — один из одиннадцати алгоритмов:

  • dss — dss (с использованием DSS)
  • dss1 — dss (с использованием DSS-1)
  • md4 — md4 (с 128-битными бинарными строками с использованием MD4)
  • md5 — md5 (с 128-битными бинарными строками с использованием MD5)
  • mdc2 — mdc2 (с использованием MDC2)
  • ripemd160 — ripemd (с 160-битными бинарными строками с использованием RIPEMD-160)
  • sha1 — sha-1 (с 160-битными бинарными строками с использованием SHA-1)
  • sha224 — sha-224 (с 224-битными бинарными строками с использованием SHA-2)
  • sha256 — sha-256 (с 256-битными бинарными строками с использованием SHA-2)
  • sha384 — sha-384 (с 384-битными бинарными строками с использованием SHA-2)
  • sha512 — sha-512 (с 512-битными бинарными строками с использованием SHA-2)

Возвращает

дайджест строки

Тип возвращаемого значения

string

Пример:

crypto.digest.md4('string')crypto.digest.sha512('string')

crypto.hmac

crypto.hmac.<algorithm>(key, string)crypto.hmac.<algorithm>_hex(key, string)

Передача ключа и строки. Результатом будет код аутентификации сообщения HMAC.

Параметры:

  • key (string) — ключ
  • string (string) — строка, для которой вычисляется HMAC

<algorithm> — один из восьми алгоритмов; у каждого есть версия _hex, возвращающая шестнадцатеричное значение:

  • md4 или md4_hex — md4 (с 128-битными бинарными строками с использованием MD4)
  • md5 или md5_hex — md5 (с 128-битными бинарными строками с использованием MD5)
  • ripemd160 или ripemd160_hex — ripemd (с 160-битными бинарными строками с использованием RIPEMD-160)
  • sha1 или sha1_hex — sha-1 (с 160-битными бинарными строками с использованием SHA-1)
  • sha224 или sha224_hex — sha-224 (с 224-битными бинарными строками с использованием SHA-2)
  • sha256 или sha256_hex — sha-256 (с 256-битными бинарными строками с использованием SHA-2)
  • sha384 или sha384_hex — sha-384 (с 384-битными бинарными строками с использованием SHA-2)
  • sha512 или sha512_hex — sha-512 (с 512-битными бинарными строками с использованием SHA-2)

Возвращает

код аутентификации сообщения (HMAC)

Тип возвращаемого значения

string

Пример:

crypto.hmac.md4('key', 'string')crypto.hmac.md4_hex('key', 'string')

Инкрементальные методы в модуле crypto

Предположим, что вычислен дайджест для строки 'A', затем часть 'B' добавляется в строку и необходим новый дайджест. Новый дайджест можно пересчитать для всей строки 'AB', но быстрее будет взять вычисленный дайджест для 'A' и внести изменения на основании добавленной части 'B'. Это называется многошаговым процессом, или «инкрементным» хеш-суммированием, которое Tarantool поддерживает для всех криптографических функций.

crypto = require('crypto')-- print aes-192 digest of 'AB', with one step, then incrementallykey = 'key/key/key/key/key/key/'iv =  'iviviviviviviviv'print(crypto.cipher.aes192.cbc.encrypt('AB', key, iv))c = crypto.cipher.aes192.cbc.encrypt.new(key)c:init(nil, iv)c:update('A')c:update('B')print(c:result())c:free()-- print sha-256 digest of 'AB', with one step, then incrementallyprint(crypto.digest.sha256('AB'))c = crypto.digest.sha256.new()c:init()c:update('A')c:update('B')print(c:result())c:free()

Получение одинаковых результатов из модулей digest и crypto

Следующие функции равноценны. Например, функция digest и функция crypto приведут к одному результату.

crypto.cipher.aes256.cbc.encrypt('x',b32,b16)==digest.aes256cbc.encrypt('x',b32,b16)crypto.digest.md4('string') == digest.md4('string')crypto.digest.md5('string') == digest.md5('string')crypto.digest.sha1('string') == digest.sha1('string')crypto.digest.sha224('string') == digest.sha224('string')crypto.digest.sha256('string') == digest.sha256('string')crypto.digest.sha384('string') == digest.sha384('string')crypto.digest.sha512('string') == digest.sha512('string')