我正在尝试用php创建seafile用户。 http://www.seafile.com
现有用户的哈希值如下:
PBKDF2SHA256$10000$9ee87caa42ed5b5fd3f62781d8df82af5e2d9e5e5250d22bf70336cc5e2fb060$478602208097c48b47042e25d026fec1b0363551a4f52aa2e2674f3093010215
所以我假设散列算法是sha256,使用pkkdf2密钥推导函数和10k轮。之后的第一部分应该是由$分隔的盐,然后应该是pwd哈希。
Seafile是开源的,所以我试图找到生成此哈希的代码并找到this one:
有一个名为hash_password_pbkdf2_sha256()
的功能可以完成这项工作。
当我尝试使用php创建相同的哈希时(密码为“12345678”)
hash_pbkdf2('sha256', '12345678','9ee87caa42ed5b5fd3f62781d8df82af5e2d9e5e5250d22bf70336cc5e2fb060', 10000, 64)
我得148f4d331b647bafa2b15d145814d56fbe40e13221aff6e53329680b4cadbc84
不等于上面的478602208097c48b47042e25d026fec1b0363551a4f52aa2e2674f3093010215
任何想法如何解决这个问题?
答案 0 :(得分:3)
您指向的文件中的C函数validate_passwd_pbkdf2_sha256
在哈希密码之前调用hex_to_rawdata (salt_str, salt, SHA256_DIGEST_LENGTH)
。 PHP等价物是hex2bin。
hash_pbkdf2(
'sha256',
'12345678',
hex2bin('9ee87caa42ed5b5fd3f62781d8df82af5e2d9e5e5250d22bf70336cc5e2fb060'),
10000,
64
);
生成预期的478602208097c48b47042e25d026fec1b0363551a4f52aa2e2674f3093010215