PHP SHA-512到Python + C SHA-512

时间:2011-05-17 04:25:03

标签: php python sha512

我正在开发一个游戏网站。帐户是通过基于php的网站创建的,游戏登录服务器正在用Python进行原型化,并将在C中最终确定。我遇到的问题是,当我在PHP中使用哈希值时,我无法重现相同的结果在Python中使用相同的起始数据和salt。我在这里查看了PHP中的算法http://www.akkadia.org/drepper/SHA-crypt.txt并将其与我的方式进行了比较,并注意到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 :(得分:1)

以下是一些更简单的Python代码。

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

答案 1 :(得分:0)

python中的字符串末尾不包含空字节。

range(2,5000)只会循环4998次。