Перенос хэшей из php crypt() в python
Вопрос
Мне было интересно, существует ли python, родственный PHP crypt()
функция, которая работает аналогичным образом, генерируя случайную соль и встраивая ее в сохраненную строку.
У меня есть таблица хэшированных паролей, которые были созданы с помощью $5$
строковый ключ для настройки соленой криптограммы на основе SHA256.У этих хэшей была некоторая дополнительная записанная энтропия, присоединенная к обоим концам с фиксированным интервалом, но разделение этих символов из строки и получение основного хэша тривиально и вообще не является проблемой.
Я просмотрел документацию по python и не могу найти никаких методов в hashlib
которые, похоже, используют тот же синтаксис, что и в php crypt()
.Является ли подход, используемый в PHP (формат ввода, разделенный знаками доллара между salt, algo и rounds), уникальным для данного языка?
Спасибо.
Редактировать:
Это выглядит так, как будто пересмотренная версия собственного родного языка python crypt
функция будет использовать процедуры, аналогичные процедурам PHP.Из предрелизной документации 3.3:
http://docs.python.org/dev/library/crypt.html
Редактировать:
Наконец-то нашел Passlib, библиотеку, которая предоставляет эту функциональность на чистом python.
Решение
Это, безусловно, выглядит очень похоже на Криптография FreeBSD (смотрите "модульный склеп" на странице руководства).Я действительно не помню, работает ли это так же в Linux или другом, но это, похоже, указывает на то, что это не уникально.
Насколько я знаю, в Python нет прямого эквивалента, но создать свой собственный не должно быть слишком сложно, поскольку сами алгоритмы шифрования должны поддерживаться в hashlib
.
Другие советы
Я понимаю, что этот вопрос старый, однако я нашел его, когда пытался реализовать алгоритм входа в систему на Python, который изначально был написан на PHP.Функция crypt в PHP использует любой из нескольких небезопасных алгоритмов DES, включая bcrypt.Это зависит от того, чем вы хэшируете свою строку.Passlib - это в значительной степени ваш лучший выбор для репликации функциональности, которую ваше приложение в данный момент получает от PHP crypt.Возьмите один из ваших хэшированных паролей и посмотрите на начало строки.Вы должны увидеть что-то вроде $ 2a$, $3$, $6$ ( или что-то подобное).Обратите внимание, что если эта строка не существует, вы, скорее всего, используете стандартное хеширование DES.
Перейдите по этой ссылке:
http://pythonhosted.org/passlib/modular_crypt_format.html#mcf-identifiers
Затем сопоставьте его с алгоритмом, который вам нужно реализовать на Python.Идентификаторы схемы являются ссылками на документацию passlib, касающуюся этого алгоритма хеширования.На этом этапе у вас должна быть вся информация, необходимая для завершения повторной реализации.