我使用Werkzeug进行密码散列,以便用户输入的密码是安全的(至少)。
让我们说我的申请如下:
当用户登录时,我将使用check_password_hash然后登录用户。
用户登录后,我想向他们显示密码。
我遇到的问题:
如何将哈希密码转换回字符串以向用户显示其密码?
我的代码如下:
>>> import werkzeug.security as ws
>>> ws.generate_password_hash('abcdefg')
'pbkdf2:sha1:1000$fYAXLNA6$637528ae2fa195304c328d585e805b164f1c718f'
>>> ws._hash_internal('pbkdf2:sha1:1000', 'fYAXLNA6', 'abcdefg')
('637528ae2fa195304c328d585e805b164f1c718f', 'pbkdf2:sha1:1000')
现在我如何将'6375 .....'转换回'abcdefg'?
我可以访问数据库以及所需的所有其他内容。基本上我是管理员!
注意:我无法使用用户在登录时输入的密码。我只能使用数据库中的密码。
答案 0 :(得分:2)
用户登录后,我想向他们显示密码。
哈希密码的全部目的和原因是你永远不能这样做。不是你,不是别人。
如果有人使用密码列表访问或窃取数据库,则将哈希值转换回原始密码确实非常昂贵。您将需要一百万年才能打破并反转一个密码。
答案 1 :(得分:1)
使用散列时,我们无法恢复原始文本。通常,所有密码都存储为哈希值,以便使密码保密(仅供用户使用)。所有服务器都实现了这一点如果要获取密码,则应使用对称密钥加密。在客户端和服务器之间共享密钥的地方(但这是一种非常糟糕的做法)最好使用散列。