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

基本php pbkdf2哈希

柯昆杰
2023-03-14

我是相对较新的PHP,刚刚开始掌握盐的点,当谈到散列密码(我想?)。不管怎样,这是我的问题...

现在我有一个mysql数据库,用户名,密码,盐字段。密码字段长度为64个字符,盐字段为3个字符。在注册时,每个用户名被分配一个随机的盐。我对此没有任何问题(我相信)。首先,通过以下方式散列用户所需的密码:

$hashedinput = hash ('sha256', $input);

然后,通过以下过程将用户所需的密码与pbkdf2中包含的盐进行散列,并将其输入数据库:

$password = pbkdf2('sha256', $hashedinput, $salt, 10000, 64);

我的问题是登录。当将数据库中的哈希密码与用户输入的密码进行比较时,它总是会返回!=.以下是我验证登录的方法:

$userData = mysql_fetch_array($search, MYSQL_ASSOC);
$inputhash = hash('sha256', $input); // From Form
$salt = $userData['salt']; // Salt from DB
$password = pbkdf2('sha256', $inputhash, $salt, 10000, 64);
$knownpassword = $userData['password']; // Known password from DB

因此,为了排除故障,我回显了所有输出,这是我输入正确密码时的样子(它不会让我登录):

输入密码:3d8bc905668c1a1cca5b53a78941d3ca4673e12df6ac5e98e19fa47b153406f6e66913e43bf60478907ca07429b0cf90c808ce2097e0544cc44d298bfb7b85ad

DB密码: 3d8bc905668c1a1cca5b53a78941d3ca4673e12df6ac5e98e19fa47b153406f6

请注意,输入密码的前64个字符是正确的,但它将继续使用,总共128个字符。DB密码仅为64。

提前感谢!

共有1个答案

闾丘书
2023-03-14

托马斯·普塔切克(Thomas Ptacek)不久前写了一篇很棒的文章,详细解释了什么是salt,它为什么有用,并给出了关于密码哈希系统的#1规则:

使用其他人的密码系统。不要建造你自己的。

如果要在应用程序中使用PHP5.5,请使用新的password_hashAPI;如果不使用,请确保至少使用PHP5.3,并使用password_hashuserland兼容性库。它们旨在为你消除所有的痛苦。

 类似资料:
  • 问题内容: 我对哈希表的基本概念感到困惑。如果我要编码一个哈希,我什至会开始吗?哈希表和普通数组之间有什么区别? 基本上,如果有人回答了这个问题,我想我的所有问题都会得到回答:如果我有100个随机生成的数字(作为键),那么我将如何实现哈希表,以及为什么它比数组有优势? 伪代码或Java将被视为一种学习工具… 问题答案: 到目前为止的答案已经帮助定义了哈希表并解释了一些理论,但是我认为一个示例可能会

  • 问题内容: 我正在使用网络爬虫(请不要建议现有的,这不是一种选择)。我按照预期的方式工作。我唯一的问题是,当前我正在使用一种服务器/客户端模型,其中服务器进行爬网和处理数据,然后将其放置在中央位置。 此位置是从我编写的类创建的对象。在内部,该类维护一个定义为 我将数据存储在地图中,使网址成为键(我保持这些网址唯一),而hasmap值存储该网址的相应数据字段,例如标题,值等 我偶尔会序列化所使用的内

  • 问题内容: 在C / C ++ / Java / C#中是否有相对简单易懂(易于实现)的局部敏感哈希示例? 我想了解更多有关此概念的信息,因此想在几个文本文件上尝试实现只是为了了解其工作原理,因此我不需要任何高性能或任何内容……仅是哈希示例对于相似的输入返回相似的哈希值的函数。我可以通过后面的例子从中学到更多。:) 问题答案: 对于字符串,您可以使用近似匹配算法。 产生随机字串 对于所有字符串,使

  • 基差数据 接口名称 basis 接口描述 基差数据接口 请求参数 参数名 说明 举例 variety 品种编码 RB date 查询日期 2018-08-08 返回参数 参数名 类型 说明 trans_date date 查询日期 spot float 现货价格 basis float 基差,基差 = 现货价格 - 期货价格 basis_rate float 基差率,基差率 = (现货价格 - 期

  • 本文向大家介绍StackExchange.Redis 基本,包括了StackExchange.Redis 基本的使用技巧和注意事项,需要的朋友参考一下 示例 连接后,您可以通过调用ISubscriber.Publish方法来发布消息: 消费者可以使用该ISubscriber.Subscribe方法订阅频道。发布者发送的消息将由传递给此方法的处理程序处理。