使用php批量创建seafile用户(cloudstorage):密码哈希不匹配

时间:2014-04-29 23:02:49

标签: php hash sha256 password-encryption pbkdf2

我正在尝试用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

任何想法如何解决这个问题?

1 个答案:

答案 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