Python 3.6+secretsфункция
secrets.compare_digest()
сравнение
Сравнивает две строки или два bytes за время, не зависящее от места первого различия, — защита от атак по времени.
Синтаксис
secrets.compare_digest(a, b) -> bool
Обычное == останавливается на первом несовпавшем символе, и по времени ответа можно подобрать токен посимвольно. compare_digest проверяет всё целиком. Строки должны быть только ASCII — иначе TypeError; для произвольного текста сравнивайте .encode(). Это тот же объект, что hmac.compare_digest.
Примеры
import secrets
token = secrets.token_hex(8)
print(secrets.compare_digest(token, token)) # → True
print(secrets.compare_digest(b'abc', b'abd')) # → False
try:
secrets.compare_digest('пароль', 'пароль')
except TypeError as e:
print(e) # → comparing strings with non-ASCII characters is not supported
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности