在Windows中使用crypt模块?

时间:2013-11-09 15:51:56

标签: python windows python-2.7 python-3.3 crypt

在IDLE和Python版本3.3.2中,我尝试像这样调用python模块:

hash2 = crypt(word, salt)

我将它导入我的程序顶部,如下所示:

from crypt import *

我得到的结果如下:

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'

但是,当我在Ubuntu中使用Python 2.7.3执行相同的文件adams.py时,它执行得非常完美 - 没有错误。

我尝试了以下操作来解决我的Windows&amp; Python 3.3.2(虽然我确定OS不是问题,Python版本或我使用的语法是问题):

  1. Python33目录中的目录从Lib重命名为lib
  2. crypt.py中的lib重命名为_crypt.py。但是,事实证明整个crypt.py模块依赖于名为_crypt.py的外部模块。
  3. 浏览互联网以下载适合类似_crypt.py
  4. 的任何内容

    这不是Python,对吗?这是我...(?)我正在使用语法导入和使用2.7.3中可接受但不在3.3.2中的外部模块。或者我在3.3.2中发现了一个错误?

4 个答案:

答案 0 :(得分:8)

更好的方法是使用python passlib模块生成linux密码的兼容crypt哈希(我假设你最想要的)。我通过在rootpw和用户属性中注入生成的散列密码值,使用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)

第一个参数是不言自明的 第二个&amp;第三个参数与规范符合性有关,并且需要生成与Linux兼容的密码哈希 *** (见:Passlib: SHA256 spec, format & algorithm

*** 注意:使用SHA512进行测试,但我认为没有理由不能使用SHA256或MD5。

答案 1 :(得分:3)

我认为这是因为cryptUnix Specific Service

位于crypt的{​​{3}}顶部:

  

34.5。 crypt - 检查Unix密码的函数

     

平台:Unix

答案 2 :(得分:3)

我在这里找到了一个名为fcrypt的替代模块:

它已经过时了,所以不要指望python3兼容性。

答案 3 :(得分:-1)

您可以在Windows PC上使用'bcrypt'来实现此目的,这样做是因为crypt只是一个UNIX模块,因此不容易在Windows中兼容。转到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