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