当前位置: 首页 > 知识库问答 >
问题:

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

颛孙庆
2023-03-14

我试图用php创建seafile用户。http://www.seafile.com

已存在的用户的哈希如下所示:

PBKDF2SHA256$10000$9ee87caa42ed5b5fd3f62781d8df82af5e2d9e5e5250d22bf70336cc5e2fb060$478602208097c48b47042e25d026fec1b0363551a4f52aa2e2674f3093010215

因此,我假设散列算法是sha256,使用pbkdf2密钥派生函数进行10k轮。之后的第一部分应该是用$分隔的盐,然后应该是pwd散列。

Seafile是开源的,所以我试图找到生成这个哈希的代码,找到了这个:

有一个名为hash\u password\u pbkdf2\u sha256()函数应该执行此任务。

当我试图用php创建与上面相同的散列时(密码为“12345678”)

hash_pbkdf2('sha256', '12345678','9ee87caa42ed5b5fd3f62781d8df82af5e2d9e5e5250d22bf70336cc5e2fb060', 10000, 64)

我得到的148F4D331B647BAFA2B15D145814D56FBE40E13221AFF56E533229680B4CADBC84不等于上述478602208097C48B47042E25D026FEC1B036551A4F52AA2SE2674F3093010215

有没有办法解决这个问题?

共有1个答案

潘振国
2023-03-14

指向的文件中的C函数validate_passwd_pbkdf2_sha256在散列密码之前调用hex_to_rawdata(salt_str,盐,SHA256_DIGEST_LENGTH)。相当于PHP的是hex2bin。

hash_pbkdf2(
  'sha256',
  '12345678',
  hex2bin('9ee87caa42ed5b5fd3f62781d8df82af5e2d9e5e5250d22bf70336cc5e2fb060'),
  10000,
  64
);

生成预期的478602208097C48B47042E25D026FEC1B036551A4F52AA2AEE2674F3093010215

 类似资料:
  • 多亏了最近一篇文章中的一些好建议,我才从中实现了PBKDF2https://defuse.ca/php-pbkdf2.htm进入一个小的PHP图像库,我正在建设教自己一些PHP。 我知道您将salt和hash存储在数据库中,然后在用户输入密码时重新构建它们以匹配。我不明白的是,当上面网站上的validate_password函数为同一个密码生成不同的、唯一的salt时,它是如何工作的。 例如,我创

  • 问题内容: 我正在尝试为Laravel创建哈希密码。现在有人告诉我使用Laravel哈希帮助器,但我似乎找不到它,或者我的方向错误。 如何创建laravel哈希密码?在哪 编辑:我知道代码是什么,但我不知道在哪里以及如何使用它,因此它给了我哈希密码。如果得到哈希密码,则可以手动将其插入数据库 问题答案: 使用Bcrypt散列密码: 这将创建一个哈希密码。您可以在控制器中甚至在模型中使用它,例如,如

  • 问题内容: 如何使用Spring Security 3对密码进行哈希处理并对其加盐? 问题答案: 以编程方式,您可以按照以下步骤进行操作: 在application- context.xml(在web.xml下的定义)文件中定义bean(此示例使用)。 然后自动连接密码编码器: 在您的方法中或您想散列和加盐的任何地方。 上面的调用应返回一个加盐的哈希值(作为)。 那应该做。我假设您可以弄清楚所需的

  • 每个人在建构 PHP 应用时终究都会加入用户登录的模块。用户的帐号及密码会被储存在数据库中,在登录时用来验证用户。 在存储密码前正确的 哈希密码 是非常重要的。密码的哈希操作是单向不可逆的,该哈希值是一段固定长度的字符串且无法逆向推算出原始密码。这就代表你可以哈希另一串密码,来比较两者是否是同一个密码,但又无需知道原始的密码。如果你不将密码哈希,那么当未授权的第三者进入你的数据库时,所有用户的帐号

  • 问题内容: 我想创建一个(用键签名)的哈希 如何使用Node.js Crypto创建该哈希? 问题答案: 加密文档:http : //nodejs.org/api/crypto.html

  • 我正在写一个Django应用程序,需要与现有的Java播放框架应用程序一起工作。Play应用程序使用PasswordHash.java来存储密码。它以冒号分隔的格式存储密码。每个哈希都存储为::。 例如,下面是密码“测试”的条目: 在这里,我们可以通过拆分字符串并找到: 迭代次数: 盐: PBKDF2哈希:。 我修改了Django的check_密码机制以与此格式兼容,但发现它认为密码不正确。我用了