在Windows中使用crypt模块?

ldfqzlk8  于 2023-11-21  发布在  Windows
关注(0)|答案(6)|浏览(206)

在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
1.将lib中的crypt.py重命名为_crypt.py。然而,原来整个crypt.py模块也依赖于一个名为_crypt.py的外部模块。
1.浏览互联网下载任何远程适当的类似_crypt.py
不是Python吧?是我...我使用语法来导入和使用外部模块,这在2.7.3中是可以接受的,但在3.3.2中是不能接受的。或者我在3.3.2中发现了一个bug?

9rygscc1

9rygscc11#

一个更好的方法是使用python passlib模块,它可以生成兼容的Linux密码的crypt散列(我假设这是你最想要的)。我已经通过使用Kickstart文件验证了这一点,通过将生成的散列密码值注入rootpw和user属性。你需要的函数是:

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。
20jt8wwn

20jt8wwn2#

我假设这是因为cryptUnix Specific Service
cryptdocs顶部:
34.5. crypt -检查Unix密码的函数

平台:Unix

pzfprimi

pzfprimi3#

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

它太旧了,所以不要指望它与python3兼容。

xxe27gdn

xxe27gdn4#

如果你在Windows上,你可以很容易地使用bcrypt模块这是在Windows和Mac上都支持的。但是,如果错误在我自己的情况下继续,检查代码是否自动为你导入crypt。

8ljdwjyq

8ljdwjyq5#

我也有同样的问题。我试图在我的Windows 10上使用crypt。我使用了sha512解决了这个问题。

from passlib.hash import sha512_crypt as sha512
hash = sha512.hash(passwd, rounds=5000)

字符串

w6mmgewl

w6mmgewl6#

您可以在Windows PC上使用'bcrypt'来实现此目的,这样做是因为crypt只是一个UNIX模块,因此在Windows中不容易兼容。

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

相关问题