在Windows中使用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和Python 3.3.2的问题(虽然我确定操作系统不是问题,Python版本或我使用的语法是问题):

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

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

我认为这是因为crypt是一个Unix特定服务 。

在土 crypt的文档顶部:

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

平台:Unix

一个更好的方法是使用python passlib模块来生成linux密码的兼容crypt哈希(我想这就是你最可能想要的)。 我已经通过使用Kickstart文件通过在rootpw和用户属性中注入生成的散列密码值来验证这一点。 你需要的功能是:

 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规范,格式和算法 )

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

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

这是旧的,所以不要指望python3的兼容性。

您可以在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