我需要使用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/

10-09 08:28