Python Glossary English

Python 3.6+hashlibфункция

hashlib.scrypt()

хеширование паролей

Выводит ключ из пароля алгоритмом scrypt (RFC 7914): медленно и с большим расходом памяти, что затрудняет перебор паролей на видеокартах.

Синтаксис

hashlib.scrypt(password, *, salt, n, r, p, maxmem=0, dklen=64)

Пароли не хранят ни открыто, ни как sha256(password): быстрый хеш перебирается миллиардами вариантов в секунду. scrypt специально дорогой: n — множитель стоимости (степень двойки, например 2**14), r — размер блока, p — параллельность; память растёт как 128 * r * n байт. Соль (salt) — случайные 16+ байт из os.urandom, своя для каждого пароля, и хранится рядом с результатом. Аргументы, кроме пароля, только именованные. Проверка пароля — повторный вызов с той же солью и сравнение через hmac.compare_digest. Функция есть, если Python собран с OpenSSL 1.1+.

Примеры

import hashlib, hmac, os
salt = os.urandom(16)
key = hashlib.scrypt(b'secret', salt=salt, n=2**14, r=8, p=1)
print(len(key))  # → 64
again = hashlib.scrypt(b'secret', salt=salt, n=2**14, r=8, p=1)
print(hmac.compare_digest(key, again))  # → True

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности