Я немного поиграл с флеш-защитой, пытаясь заставить меня работать в различных сценариях. Мне не нужно было ускорять хэш, поэтому у меня может не быть прямого ответа, поэтому я могу лишь указать вам правильное направление.
РЕДАКТИРОВАТЬ Официальная защита фляги в github: this . Ссылки, которые я использовал ниже, указывают на мой форк, который имеет несколько изменений, так что, если вам нужно форкать, форк официальный
1) Flask-Security использует passlib для хеширования
2) Как отмечено в ссылке, которой вы поделились, Flask-Security использует bcrypt, который намеренно медленно
3) Bcrypt использует коэффициент работы, чтобы определить, сколько времени вы хотите, чтобы он хэшировал данные. В passlib рабочий фактор представлен переменной int, которая называется rounds
4 Для хэширования данных защита колб использует следующую функцию в flask-security / utils.py
def hash_data(data):
return _hashing_context.hash(encode_string(data))
5 для проверки ваших хешированных данных (например, токена) он использует эту функцию в том же файле
def verify_hash(hashed_data, compare_data):
return _hashing_context.verify(encode_string(compare_data), hashed_data)
6) hashing_context получен из passlib в flask-security / core.py , как это в разных местах файла
from passlib.context import CryptContext
def _get_hashing_context(app):
schemes = cv('HASHING_SCHEMES', app=app)
deprecated = cv('DEPRECATED_HASHING_SCHEMES', app=app)
return CryptContext(
schemes=schemes,
deprecated=deprecated)
hashing_context=_get_hashing_context(app),
и, наконец, в utils.py (ранее поделился вот так)
_hashing_context = LocalProxy(lambda: _security.hashing_context)
CryptContext, импортированный из passlib и использованный в шестом выше, может принимать другой аргумент, который округляет число от 4 до 31, по умолчанию это 12 и согласно документам , увеличивающим округление на единицу DOUBLES количество времени, которое требуется
Так как CryptContext не имеет округленного значения, переданного ему в безопасности колбы, я предполагаю, что он использует значение по умолчанию 12, так что вы можете поэкспериментировать с различными цифрами, чтобы увидеть, как это происходит. Что-то вроде
def _get_hashing_context(app):
schemes = cv('HASHING_SCHEMES', app=app)
deprecated = cv('DEPRECATED_HASHING_SCHEMES', app=app)
return CryptContext(
schemes=schemes,
deprecated=deprecated,
pbkdf2_sha256__default_rounds=your_rounds) #I added this line
Так что вам нужно будет раскошелиться на безопасность, сменить раунды на подходящую вам фигуру и установить репо вот так
pip install git+https://github.com/your_repo/flask-security
Это довольно много информации, надеюсь, это будет как-то полезно.
Дайте мне знать, как это происходит, поскольку мне это может понадобиться в недалеком будущем