PHP SHA-512 转换为 Python+C SHA-512

0 投票
2 回答
1043 浏览
提问于 2025-04-16 17:47

我正在为一个游戏制作网站。用户账号是通过这个基于PHP的网站创建的,而游戏的登录服务器正在用Python进行原型开发,最终会用C语言完成。我遇到的问题是,当我在PHP中对某些数据进行哈希处理时,无法在Python中用相同的起始数据和盐值得到相同的结果。我查看了PHP中的算法,发现PHP在处理时会把末尾的空字节去掉。不过,除了这个问题,我在其他方面也没有找到太多的线索。

Python:

def HashPassword(Salt,Password,Rounds=5000):
    passhash=hashlib.sha512(Password+Salt).digest()[:-1]
    for i in xrange(2,Rounds):
        passhash=hashlib.sha512(passhash+Salt).digest()[:-1]
    return passhash

PHP:

function HashPW($password, $salt = "")
{
    if(strlen($salt) == 0) $salt = RandChar(16);
    return crypt($password, '$6$rounds=5000$' . $salt . '$');
}

2 个回答

0

在Python中,字符串的结尾并没有一个空字节。

而且,range(2,5000)这个代码只会循环4998次。

1

这里有一些更简单的Python代码给你。

import crypt
def hashPassword(salt, password, rounds=5000):
    return crypt.crypt(password, '$6$rounds={:d}${}$'.format(rounds, salt))

撰写回答