PHP SHA-512 转换为 Python+C SHA-512
我正在为一个游戏制作网站。用户账号是通过这个基于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))