используйте python для создания совместимого пароля ldap (md5crypt) в windows - PullRequest
3 голосов
/ 01 ноября 2010

Знаете ли вы, как создать совместимый с ldap пароль (предпочтительно md5crypt) через python в Windows

Раньше я писал что-то подобное в Linux, но модуль crypt отсутствует в Windows

char_set = string.ascii_uppercase + string.digits
salt = ''.join(random.sample(char_set,8))
salt = '$1$' + salt + '$'
pwd = "{CRYPT}" + crypt.crypt(str(old_password),salt)

Ответы [ 4 ]

4 голосов
/ 07 апреля 2011

Библиотека Python Passlib содержит кроссплатформенные реализации всех алгоритмов crypt (3).В частности, он содержит ldap_md5_crypt , что звучит именно так, как вы хотите.Вот как его использовать (этот код будет работать в Windows или Linux):

from passlib.hash import ldap_md5_crypt

#note salt generation is automatically handled
hash = ldap_md5_crypt.encrypt("password")

#hash will be similar to '{CRYPT}$1$wa6OLvW3$uzcIj2Puf3GcFDf2KztQN0'

#to verify a password...
valid = ldap_md5_crypt.verify("password", hash)

Я должен отметить, что хотя MD5-Crypt широко поддерживается (Linux, все BSD, внутренне в openssl), это тем не менее не самый сильный доступный хэш действительно ужасно небезопасен, и его следует избегать, если это вообще возможно.Если вам нужен самый сильный хеш, совместимый с linux crypt (), возможно, SHA512-Crypt - это то, что вам нужно.Он добавляет переменные раунды, а также некоторые другие улучшения внутри MD5-Crypt.

3 голосов
/ 04 марта 2015

Отсюда http://www.openldap.org/faq/data/cache/347.html

Один из вариантов генерации SHA-хеша может быть:

import sha 
from base64 import b64encode 

ctx = sha.new("your_password") 
hash = "{SHA}" + b64encode(ctx.digest())
print(hash)

Этот код для Python.

# python my_sha.py
{SHA}Vk40DNSEN9Lf6HbuFUzJncTQ0Tc=

Я (и не только я) не рекомендую больше использовать MD5.

PS. Перейдите по ссылке, чтобы попробовать несколько вариантов окон.

1 голос
/ 01 ноября 2010

Вы захотите использовать fcrypt , который является чистой реализацией Python модуля Unix crypt. Это немного медленнее, чем crypt, но имеет те же функции.

0 голосов
/ 01 ноября 2010

Отказ от ответственности: я знаю Google, а не криптографию.

Из crypt документов :

Этот модуль реализует интерфейс для склепа (3) подпрограмма, которая является односторонней хэш-функцией, основанной на модифицированном алгоритме DES;см. справочную страницу Unix для получения более подробной информации.Возможные варианты использования включают в себя разрешение Python-сценариям принимать вводимые пароли от пользователя или попытки взломать пароли Unix с помощью словаря.

Вы можете взглянуть на md5crypt.py.В качестве альтернативы crypt для Windows является частью GnuWin32 .Вот некоторые из справочной страницы Unix;интерфейс Windows должен быть похожим.

CRYPT (3) Руководство программиста Linux
CRYPT (3)

NAME crypt, crypt_r - пароль и шифрование данных

SYNOPSIS

   #define _XOPEN_SOURCE
   #include <unistd.h>

   char *crypt(const char *key, const char *salt);

   char *crypt_r(const char *key, const char *salt,
                 struct crypt_data *data);

Связь с -lcrypt.

ОПИСАНИЕ

crypt () - это функция шифрования пароля.Он основан на стандартном алгоритме шифрования данных с вариациями, предназначенными (помимо прочего) для предотвращения использования аппаратных реализаций поиска ключа.

ключ - это введенный пользователем пароль.

соль - этодвухсимвольная строка, выбранная из набора [a–zA–Z0–9./].Эта строка используется для нарушения алгоритма одним из 4096 различных способов.

Взяв младшие 7 бит каждого из первых восьми символов ключа, получается 56-битный ключ.Этот 56-битный ключ используется для многократного шифрования константной строки (обычно строки, состоящей из всех нулей).Возвращаемое значение указывает на зашифрованный пароль, серию из 13 печатных символов ASCII (первые два символа представляют саму соль).Возвращаемое значение указывает на статические данные, содержимое которых перезаписывается при каждом вызове.

Предупреждение. Пространство клавиш состоит из 2 ** 56, равных 7,2e16 возможных значений.Исчерпывающие поиски этого ключевого пространства возможны с использованием массово параллельных компьютеров.Доступно программное обеспечение, такое как crack (1), которое будет искать часть этого ключевого пространства, которая обычно используется людьми для паролей.Следовательно, выбор пароля должен, как минимум, избегать общих слов и имен.Рекомендуется использовать программу passwd (1), которая проверяет взломанные пароли в процессе выбора.

Сам алгоритм DES имеет несколько особенностей, которые делают использование интерфейса crypt () очень плохим выбором дляничего кроме аутентификации по паролю.Если вы планируете использовать интерфейс crypt () для проекта криптографии, не делайте этого: получите хорошую книгу по шифрованию и одну из широко доступных библиотек DES.

...