Модуль digest
A «digest» is a value which is returned by a function (usually a
Cryptographic hash function),
applied against a string. Tarantool’s digest
module supports several types of cryptographic hash functions (
AES,
MD4,
MD5,
SHA-1,
SHA-2,
PBKDF2)
as well as a checksum function (CRC32), two
functions for base64, and two non-cryptographic hash functions
(guava,
murmur).
Some of the digest functionality is also present in the 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.pbkdf2()
yields and should not be used in a transaction (betweenbox.begin()
andbox.commit()
/box.rollback()
). PBKDF2 is a time-consuming hash algorithm. It runs in a separate coio thread. While calculations are performed, the fiber that callsdigest.pbkdf2()
yields and another fiber continues working in the tx thread.
-
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
()¶ Возврат кодированного по 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.
The
crc32
andcrc32_update
functions use the Cyclic Redundancy Check polynomial value:0x1EDC6F41
/4812730177
. (Other settings are: input = reflected, output = reflected, initial value = 0xFFFFFFFF, final xor value = 0x0.) If it is necessary to be compatible with other checksum functions in other programming languages, ensure that the other functions use the same polynomial value.Например, в 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)¶ Возврат числа с помощью консистентного хеширования.
The guava function uses the Consistent Hashing algorithm of the Google guava library. The first parameter should be a hash code; the second parameter should be the number of buckets; the returned value will be an integer between 0 and the number of buckets. For example,
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())
In the following example, the user creates two functions, password_insert()
which inserts a SHA-1 digest of the word «^S^e^c^ret Wordpass» into a tuple
set, and password_check()
which requires input of a password.
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'
...