Модуль digest¶
Общие сведения¶
«Дайджест» – это значение, которое возвращает функция (как правило, криптографическая хеш-функция – Cryptographic hash function), примененная к строке. Модуль``digest`` Tarantool’а поддерживает несколько типов криптографических хеш-функций (AES, MD4, MD5, SHA-0, 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.sha() | Получение дайджеста с помощью SHA-0 |
digest.sha_hex() | Получение шестнадцатеричного дайджеста с помощью SHA-0 |
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.
sha
(string)¶ Возврат 160-битной двоичной строки = дайджест, полученный с помощью SHA-0.
Не рекомендуется.
-
digest.
sha_hex
(string)¶ Возврат 40-байтной строки = шестнадцатеричное значение дайджеста, вычисленного с помощью SHA.
-
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)¶ Возврат числа с помощью консистентного хеширования.
Функция guava использует алгоритм консистентного хеширование (Consistent Hashing) из библиотеки guava от Google. Первым параметром должен быть хеш-код; вторым параметром должно быть число слотов; возвращается значение в виде целого числа в диапазоне от 0 до указанного числа слотов. Например,
tarantool> digest.guava(10863919174838991, 11) --- - 8 ...
-
digest.
murmur
(string)¶ Возврат 32-битной двоичной строки = дайджест, полученный с помощью MurmurHash.
-
digest.murmur.
new
([seed])¶ Запуск инкрементного вычисления с помощью MurmurHash. См. примечания по инкрементным методам.
Инкрементальные методы в модуле 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'
...