我必须重写密码哈希,因为我的Django应用程序可以使用遗留数据库(旧的哈希写在Lua上)。我做了几乎完全相同的代码,但它返回另一个哈希。
这是我的代码:
def encode(password, salt):
first_pass = hashlib.sha512()
salted = (password + salt).encode('utf-8')
first_pass.update(salted)
digest = first_pass.digest()
for i in range(1, 5000):
next_pass = hashlib.sha512()
next_pass.update(digest + salted)
digest = next_pass.digest()
hash = base64.b64encode(digest).decode('utf-8').strip()
return hash
这是Lua中的代码:
function M.password_to_hash(plain_password, salt)
local resty_sha512 = require("resty.sha512")
local salted = plain_password.."{"..salt.."}"
local first_pass = resty_sha512:new()
first_pass:update(salted)
local digest = first_pass:final()
for i = 1, 4999 do
local next_pass = resty_sha512:new()
next_pass:update(digest..salted)
digest = next_pass:final()
end
return ngx.encode_base64(digest)
end
我需要这些片段来返回相等的哈希值。
例:
password = testdevel
salt = 9675zt3fmtc0kg0c08k4c8wosc0ss8s
Python函数返回:
6UbnltvNR6Y+wnUe2pd7RW/XglSB0SczKr7bUFCmv5l58eXuV2j3b9aSsD4DBeG44M6eJhStYE1sQIa95XbzlQ==
Lua函数返回:
d5/dFCOfKDppXs5EYe3fGL+TF/0QN9myHTqXn0Ml8Xp7+bUOOTp2xuHjjm91mQNCxMJHiWleZtGRU86OqR5s9g==
python中的salted
应该是:
salted = (password + '{' + salt + '}').encode('utf-8')