我想使用scrypt为我的用户的密码和盐创建一个哈希。我已经找到two references,但是有些事情我不了解。
他们使用scrypt加密和解密功能。一种加密随机字符串,另一种加密salt(这看起来是错误的,因为只有密码而不是salt用于解密)。看起来好像使用了解密功能来验证密码/盐,这是解密的副作用。
根据我的了解,我想要的是 key 派生函数(KDF)而不是加密/解密,并且scrypt可能会生成并使用KDF进行加密/解密。实际的KDF在后台使用,我担心盲目地遵循这些示例会导致错误。如果使用scrypt加密/解密功能来生成和验证密码,则我不了解所加密字符串的作用。它的内容或长度重要吗?
最佳答案
您是正确的-这两个链接正在使用的scrypt函数是scrypt文件加密实用程序,而不是基础kdf。我一直在缓慢地为python创建基于scrypt的独立密码哈希,然后自己遇到了这个问题。
scrypt文件实用程序执行以下操作:选择特定于系统的scrypt的n/r/p参数和“min time”参数。然后,它生成一个32字节的盐,然后调用scrypt(n,r,p,salt,pwd)
创建一个64字节的 key 。工具返回的二进制字符串包括:1)包含n,r,p值的 header ,以及以二进制编码的盐。 2)头的sha256校验和;和3)使用 key 的前32个字节的校验和的hmac-sha256签名副本。然后,它使用 key 的其余32个字节对输入数据进行AES加密。
我可以看到以下几点含义:
总而言之,所需要的是一种可以存储scrypt的不错的哈希格式,以及一个公开基础kdf和参数选择算法的实现。我目前正在passlib上为此工作,但并没有引起太多关注:(
不过,最重要的是-这些网站的说明“正常”,我只将一个空字符串用作文件内容,并要注意额外的开销和问题。
关于python - 如何使用scrypt在Python中为密码和盐生成哈希,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13654492/