2013-11-09 5 views
2

В IDLE и Python версии 3.3.2, я пытаюсь вызвать модуль питона так:Использование модуля crypt в Windows?

hash2 = crypt(word, salt) 

импортировать его в верхней части моей программы так:

from crypt import * 

Результат I получить заключается в следующем:

Traceback (most recent call last): 
    File "C:\none\of\your\business\adams.py", line 10, in <module> 
    from crypt import * 
    File "C:\Python33\lib\crypt.py", line 3, in <module> 
    import _crypt 
ImportError: No module named '_crypt' 

Однако, когда я исполняю тот же файл adams.py в Ubuntu, с Python 2.7.3, она выполняет отлично - без ошибок.

Я попытался следующие, чтобы решить этот вопрос для моей ОС Windows & Python 3.3.2 (хотя я уверен, что ОС не является проблемой, версия Python или мое использование синтаксиса выпуска):

  1. Переименовать папку в Python33 директории от Lib к lib
  2. Переименуйте crypt.py в lib к _crypt.py. Тем не менее, оказывается, что весь модуль crypt.py зависит от внешнего модуля, который называется _crypt.py.
  3. просматриваемой Интернет, чтобы скачать что-нибудь отдаленно соответствующий походить _crypt.py

Это не Python, верно? Это я ... (?) Я использую синтаксисы для импорта и использования внешних модулей, которые приемлемы в 2.7.3, но не в 3.3.2. Или я нашел ошибку в 3.3.2?

+0

использовать Cygwin для окон и убедитесь, чтобы выбрать «крипт-питон» при установке – amyn

ответ

1

Я предполагаю, что это потому, что crypt является Unix Specific Service.

справа в верхней части docs для crypt:

34,5. крипта - функция для проверки Unix пароли

Платформы: Unix

+0

К сожалению, я совсем забыл упомянуть. Я использую IDLE как свою IDE для Python. – adampski

+0

@adampski er, что? Ваша IDE не имеет значения. Windows не является Unix. Не имеет значения, какой IDE вы используете, Unix-специфические службы не будут работать для вас в Windows. – roippi

+0

Хммм. Странный. Ничего, благодарю вас за то, что вы указали мне это. – adampski

6

Лучшим подходом было бы использовать модуль passlib python, который генерирует совместимые хэши crypt из Linux-паролей (я предполагаю, что это то, что вы, скорее всего, захотите). Я проверил это, используя файлы Kickstart, введя порожденное значение пароля хеширования в корневых и пользовательских атрибутах. Необходимые функции:

from passlib.hash import md5_crypt as md5 
from passlib.hash import sha256_crypt as sha256 
from passlib.hash import sha512_crypt as sha512 

md5_passwd = md5.encrypt(passwd, rounds=5000, implicit_rounds=True) 
sha256_passwd = sha256.encrypt(passwd, rounds=5000, implicit_rounds=True) 
sha512_passwd = sha512.encrypt(passwd, rounds=5000, implicit_rounds=True) 

Первый параметр не требует пояснений.
Второго & третьего параметр должен делать с соблюдением спецификации и необходимы для создания Linux совместимых хэш паролей *** (см: Passlib: SHA256 spec, format & algorithm)

*** Примечания: Испытано с SHA512, но я вижу, нет причин, по которым он не должен работать с SHA256 или MD5.

+1

Crypt - это гораздо более простой и более короткий хеш-метод, уникальный для старых систем UNIX, он не имеет ничего общего с MD5/SHA и несовместим с ними. Это в основном устаревшее и, конечно, не безопасное, но если вы пытаетесь сравнить с старыми паролями шифрования, вам нужно будет использовать крипт, а не MD5 или SHA. – cecilkorik

+0

Я действительно не понимаю вашего комментария. В любом случае мне еще предстоит найти более простой способ генерации паролей для Linux-совместимых виртуальных машин при использовании Windows в качестве среды разработки;) Все остальное проявило слишком большую боль или было сомнительным качеством/функциональностью. Тем не менее, эта библиотека является crypt-совместимой, если вы посмотрите на документы:] – Kounavi

0

Вы можете использовать вместо этого «bcrypt» для этой цели на ПК с Windows, это делается потому, что crypt является UNIX-модулем, поэтому он не будет легко совместим с Windows. Go for bcrypt

import bcrypt 
password = b"passit" #passit is the word to encrypt 
pass = bcrypt.hashpw(password, bcrypt.gensalt()) 
print(b) 

Это выполнит вашу работу. Для получения дополнительной справки по адресу: http://passlib.readthedocs.io/en/stable/install.html

https://pypi.python.org/pypi/bcrypt/2.0.0