Портирование хешей из php's crypt () в python - PullRequest
3 голосов
/ 29 ноября 2011

Мне было интересно, есть ли родственный Python для функции PHP crypt(), которая выполняет аналогичные действия, генерируя случайную соль и встраивая ее в сохраненную строку.

У меня есть таблица хешированных паролейкоторые были созданы с использованием строкового ключа $5$ для настройки подсоленной криптограммы на основе SHA256.У этих хэшей была некоторая дополнительная записанная энтропия, прикрепленная к обоим концам через фиксированный интервал, но разделение этих символов из строки и получение основного хэша тривиально и не проблема вообще.

Я смотрел на питонедокументации и не может найти какие-либо методы в hashlib, которые, кажется, используют тот же синтаксис из php's crypt().Является ли подход, используемый в PHP (формат ввода, разделенный знаками доллара между солью, алгоритмом и раундом) уникальным для языка?

Спасибо.

РЕДАКТИРОВАТЬ:

Похоже, что пересмотренная версия собственной нативной функции crypt в python будет использовать процедуры, аналогичные PHP.Из предварительной версии 3.3:

http://docs.python.org/dev/library/crypt.html

EDIT :

Наконец-то найдена Passlib, библиотека, обеспечивающая эту функциональность на чистом Python.

http://packages.python.org/passlib/index.html

Ответы [ 2 ]

2 голосов
/ 04 декабря 2013

Я понимаю, что этот вопрос старый, но я нашел его, когда пытался реализовать алгоритм входа в Python, который изначально был написан на PHP. Функция crypt в PHP использует любой из нескольких небезопасных алгоритмов DES, включая bcrypt. Это зависит от того, с чем вы хэшируете свою строку. Passlib в значительной степени является вашим лучшим выбором для репликации функциональности, которую ваше приложение в настоящее время получает из PHP-склепа. Возьмите один из ваших хешированных паролей и посмотрите на начало строки. Вы должны увидеть что-то вроде $ 2a $, $ 3 $, $ 6 $ (или подобное). Обратите внимание, что если эта строка не существует, вы, скорее всего, используете стандартное хэширование DES.

Отнесите эту информацию по этой ссылке:

http://pythonhosted.org/passlib/modular_crypt_format.html#mcf-identifiers

Затем сопоставьте его с алгоритмом, который вам нужно реализовать в Python. Идентификаторы Схемы являются ссылками на документацию passlib относительно этого алгоритма хеширования. К этому моменту у вас должна быть вся информация, необходимая для завершения повторной реализации.

1 голос
/ 29 ноября 2011

Это, конечно, очень похоже на крипту FreeBSD (см. "Модульный крипта" на странице руководства). Я действительно не помню, так ли это в Linux или других, но это, кажется, указывает, что это не уникально.

Насколько я знаю, в Python нет прямого эквивалента, но его не должно быть слишком сложно развернуть, поскольку сами алгоритмы шифрования должны поддерживаться в hashlib.

...