Python:无法从 hashlib 导入 scrypt

我需要使用 scrypt 算法,因为我已经在使用 hashlib,我想......为什么不呢?我已经检查过了,它指出 OpenSSL 1.1+ 是必要的。另外,根据官方文档:


hashlib.scrypt(密码,*,盐,n,r,p,maxmem=0,dklen=64)


...


可用性:OpenSSL 1.1+。


3.6 版中的新功能。


我确保拥有最新版本的 openssl:


# openssl version

OpenSSL 1.1.1b  26 Feb 2019

我还尝试运行 python3.6 和 python3 (3.4) 并且都说他们不能导入 scrypt:


# python3.6

Python 3.6.5 (default, Apr 10 2018, 17:08:37)

[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> from hashlib import pbkdf2_hmac

>>> from hashlib import scrypt

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ImportError: cannot import name 'scrypt'

如您所见,其他方法如pbkdf2_hmac工作。可能有什么问题?


另外,*in 是hashlib.scrypt(password, *, salt, n, r, p, maxmem=0, dklen=64)什么?


茅侃侃
浏览 296回答 1
1回答

慕斯709654

我的 mac 正在运行OpenSSL 1.1.1 &nbsp;11 Sep 2018。我用 python3.6 重现了你的导入症状,发现scrypt用 python3.7 导入就好了。您可能会考虑尝试 3.7。*签名中的in 是一种相对较新的语法,它标志着位置参数的结束。所以你不能调用 as&nbsp;scrypt('secret', 'mySalt')。您需要指定关键字参数,例如scrypt('secret', salt='mySalt').&nbsp;目的是通过使用错误的 arg 顺序使错误调用变得更加困难。这对于加密 API 尤其重要,因为其中许多参数不透明且难以验证。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python