Модуль digest
«Дайджест» – это значение, которое возвращает функция (как правило, криптографическая хеш-функция – Cryptographic hash function), примененная к строке. Модуль``digest`` Tarantool’а поддерживает несколько типов криптографических хеш-функций (AES, MD4, MD5, SHA-1, SHA-2, PBKDF2), а также функцию контрольного суммирования (CRC32), две функции для base64 и две некриптографические хеш-функции (guava, murmur). Часть функций модуля digest также включена в модуль 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_hex
(string) Возврат 32-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью MD4.
-
digest.
md5_hex
(string) Возврат 32-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью MD5.
-
digest.
pbkdf2
(string, salt[, iterations[, digest-length]]) Возврат двоичной строки = дайджест, полученный с помощью PBKDF2.
Для эффективности шифрования значение параметра количества итерацийiterations
должно быть как минимум несколько тысяч. Значение параметраdigest-length
определяет длину полученной двоичной строки.
-
digest.
sha1_hex
(string) Возврат 40-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью SHA-1.
-
digest.
sha224_hex
(string) Возврат 56-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью SHA-224.
-
digest.
sha256_hex
(string) Возврат 64-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью SHA-256.
-
digest.
sha384_hex
(string) Возврат 96-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью SHA-384.
-
digest.
sha512_hex
(string) Возврат 128-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью SHA-512.
-
digest.
base64_encode
(string[, opts]) Возврат кодированного по base64 значения обычной строки.
Возможные опции:
nopad
– результат не должен включать в себя „=“ для заполнения символами в конце,nowrap
– результат не должен включать в себя символ переноса строки для разделения строк после 72 символов,urlsafe
– результат не должен включать в себя „=“ или символ переноса строки и может содержать „-„ или „_“ взамен „+“ или „/“ в качестве 62 и 63 символа в схеме.
Значения параметров могут быть
true
(правда) илиfalse
(ложь), по умолчанию используетсяfalse
.Пример:
digest.base64_encode(string_variable,{nopad=true})
-
digest.
crc32
(string) Возврат 32-битной контрольной суммы с помощью CRC32.
Функции
crc32
иcrc32_update
используют значение многочлена Cyclic Redundancy Check :0x1EDC6F41
/4812730177
. (Другие используемые значения: ввод = отраженное значение, вывод = отраженное значение, начальное значение = 0xFFFFFFFF, финальное xor-значение = 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) из библиотеки guava от Google. Первым параметром должен быть хеш-код; вторым параметром должно быть число слотов; возвращается значение в виде целого числа в диапазоне от 0 до указанного числа слотов. Например,
tarantool> digest.guava(10863919174838991, 11) --- - 8 ...
-
digest.
murmur
(string) Возврат 32-битной двоичной строки = дайджест, полученный с помощью MurmurHash.
-
digest.murmur.
new
(opts) Запуск инкрементного вычисления с помощью MurmurHash. См. примечания по инкрементным методам. Например:
murmur.new({seed=0})
Инкрементальные методы в модуле digest
Предположим, что вычислен дайджест для строки „A“, затем часть „B“ добавляется в строку, необходим новый дайджест. Новый дайджест можно пересчитать для всей строки „AB“, но быстрее будет взять вычисленный дайджест для „A“ и внести изменения на основании добавленной части „B“. Это называется многошаговым процессом или «инкрементным» хеш-суммированием, которое поддерживает Tarantool поддерживает для crc32 и murmur…
digest = require('digest')
-- вывести дайджест 'AB' по crc32 пошагово, затем с инкрементом
print(digest.crc32('AB'))
c = digest.crc32.new()
c:update('A')
c:update('B')
print(c:result())
-- вывести дайджест 'AB' по murmur hash пошагово, затем с инкрементом
print(digest.murmur('AB'))
m = digest.murmur.new()
m:update('A')
m:update('B')
print(m:result())
В следующем примере пользователь создает две функции: функцию password_insert()
, которая вставляет дайджест слова «^S^e^c^ret Wordpass» по SHA-1 в набор кортежей, и функцию 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'
...