我需要使用 scrypt 算法,因?yàn)槲乙呀?jīng)在使用 hashlib,我想......為什么不呢?我已經(jīng)檢查過了,它指出 OpenSSL 1.1+ 是必要的。另外,根據(jù)官方文檔:hashlib.scrypt(密碼,*,鹽,n,r,p,maxmem=0,dklen=64)...可用性:OpenSSL 1.1+。3.6 版中的新功能。我確保擁有最新版本的 openssl:# openssl versionOpenSSL 1.1.1b 26 Feb 2019我還嘗試運(yùn)行 python3.6 和 python3 (3.4) 并且都說(shuō)他們不能導(dǎo)入 scrypt:# python3.6Python 3.6.5 (default, Apr 10 2018, 17:08:37)[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linuxType "help", "copyright", "credits" or "license" for more information.>>> from hashlib import pbkdf2_hmac>>> from hashlib import scryptTraceback (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)什么?
1 回答

慕斯709654
TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊
我的 mac 正在運(yùn)行OpenSSL 1.1.1 11 Sep 2018
。我用 python3.6 重現(xiàn)了你的導(dǎo)入癥狀,發(fā)現(xiàn)scrypt
用 python3.7 導(dǎo)入就好了。您可能會(huì)考慮嘗試 3.7。
*
簽名中的in 是一種相對(duì)較新的語(yǔ)法,它標(biāo)志著位置參數(shù)的結(jié)束。所以你不能調(diào)用 as scrypt('secret', 'mySalt')
。您需要指定關(guān)鍵字參數(shù),例如scrypt('secret', salt='mySalt')
. 目的是通過使用錯(cuò)誤的 arg 順序使錯(cuò)誤調(diào)用變得更加困難。這對(duì)于加密 API 尤其重要,因?yàn)槠渲性S多參數(shù)不透明且難以驗(yàn)證。
添加回答
舉報(bào)
0/150
提交
取消