我需要使用scrypt算法,由于我已经在使用hashlib,所以我想出了...为什么不呢?我已经检查了this,它指出必须使用OpenSSL 1.1+。另外,根据official doc:
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
之类的其他方法也可以使用。有什么事吗另外,
*
中的hashlib.scrypt(password, *, salt, n, r, p, maxmem=0, dklen=64)
是什么? 最佳答案
我的Mac使用OpenSSL 1.1.1 11 Sep 2018
运行。
我用python3.6复制了您的导入症状,
并发现scrypt
使用python3.7导入就可以了。
您可以考虑尝试3.7。
签名中的*
是一种相对较新的语法
这标志着位置参数的结束。
因此,您不能以scrypt('secret', 'mySalt')
身份调用。
您需要指定关键字args,例如scrypt('secret', salt='mySalt')
。
目的是使使用错误的arg顺序更难于错误地调用。
这对于加密API来说尤其重要,
许多arg不透明且难以验证的地方。
关于python - Python:无法从hashlib导入scrypt,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55366629/