Мне нужно переписать хеш пароля, чтобы мое приложение 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==