如何用Python重写用Lua写的密码?

问题描述 投票:0回答:1

我必须重写密码哈希,因为我的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 authentication encryption hash lua
1个回答
1
投票

python中的salted应该是:

salted = (password + '{' + salt + '}').encode('utf-8')
© www.soinside.com 2019 - 2024. All rights reserved.