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