如何在PHP中检查字符串是否为有效的sha256哈希值?

8

如何使用PHP识别sha256哈希?另外,即使加了盐,是否有办法识别字符串是否为sha256哈希?

我不需要知道哈希的真实值(我知道这是不可能的),但我只需要验证字符串,以便在字符串是sha256哈希的情况下采取一种方式,并在不是sha256哈希的情况下采取另一种方式。


你为什么需要那个?你的问题让我觉得你对哈希的理解是错误的。 - Your Common Sense
我有一个系统,其中存储了两种类型的密码在其数据库中。由于该系统非常老,它使用“无加密”来存储密码,即明文(相当糟糕,我知道)。几年前,另一位程序员成功将密码安全性更改为SHA256 + SALT,但并不是每个密码都被散列。因此,我需要确定密码是否为SHA256哈希值。然后,如果它不是有效的哈希值,我将执行相关任务。 - Felipe Francisco
唯一的方法是检查哈希的大小,如果它的大小与所有其他密码不同,则需要哈希处理。 - Hans
2个回答

10

当你说“即使它被盐了”时,我不明白你的意思。盐值是在哈希之前添加的,它可以防止彩虹表攻击以及用户在多个网站上使用相同密码的情况。根据基数,一个简单的正则表达式就可以告诉你一个特定字符串是否是sha256哈希。我认为大多数情况下我们会遇到16进制的哈希值,在这种情况下,以下方法可以使用:

   if (preg_match("/^([a-f0-9]{64})$/", $hash) == 1) {
      return true;
   } else {
      return false;
   }

感谢您的贡献,但这是5年前的问题 :) - 当时的想法是迁移用户从一种哈希算法到另一种而不会影响用户体验,例如让所有人注销并在需要时进行操作。五年后,我看到有很多解决这个问题的方法哈哈 - Felipe Francisco
5
我在搜索如何验证字符串是否为sha256时来到了这里。由于其他人可能有同样的问题,我添加了一个答案。 :) - MerlinTheMagic
2
两年后它仍然有用! - Sam

8

检查一个哈希值是否是有效的SHA-256哈希值的唯一方法是检查其中的256位 - 如果确实有,那么某些输入可能会生成该输出。

哈希是单向的,这意味着我可以给你一个哈希值,但你永远无法解密它(这是哈希和加密之间的区别)。这对于存储密码等内容非常有用,因为明文值是不相关的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接