检查字符串是否为哈希值

时间:2011-04-13 12:09:01

标签: php security passwords sha

我正在使用SHA-512来哈希我的密码(使用盐)。我不认为我想要的是可能的,但无论如何我们都要问。

有没有办法检查字符串是否已经是SHA-512(或其他算法)哈希?

当用户登录时,我想检查他的密码。如果它仍然是纯文本,它应该转换为安全的形式。

6 个答案:

答案 0 :(得分:6)

您的任务非常简单,无需检查字符串。

首先将输入的密码与存储的密码进行比较 如果匹配 - 这是一个普通密码。因此,您可以开始转换过程。

答案 1 :(得分:5)

正如@zerkms已经提到的那样,字符串长度是你可以测试的最明显的东西。哈希也通常用十六进制编写,因此它只包含数字0到9和字符a到f。或者作为正则表达式

/[0-9a-f]{64}/i

答案 2 :(得分:2)

我对这个问题感到有些困惑。

当用户在您的网站上输入他或她的密码时,您可以假设$_POST['password'](或您命名的任何内容)中的值是纯文本格式。即使用户使用哈希函数的结果作为他们的密码,这也无所谓,因为就您的应用程序而言,它仍然是纯文本。也就是说,散列值 是用户密码,无论他们创建它的步骤如何,因为将值输入系统会导致该用户访问。在服务器上散列用户提交密码的重点是,即使也不知道用户密码。这样,如果您的数据库被泄露,则不会泄露用户密码。

获得密码后,您将从数据库中检索用户salt和哈希密码。您获取提交的表单,使用特定于用户的salt对其进行哈希处理,然后将其与数据库中的预先哈希密码进行比较。如果散列提交和预先散列的数据库值匹配,则可以假定输入了正确的密码。

我能够按照您的描述看待事情的唯一原因是,如果您以前以明文形式存储了密码,并且现在正在将它们全部转换为哈希。在这种情况下,您应该只为每个用户分配一个唯一的salt,哈希当前的纯文本密码+ salt,并将其存储为新密码。当启用“hashwords”时,应该一次性进行此转换,而不是在用户首次在转换后登录时逐个进行转换。

答案 3 :(得分:1)

显然,猜测的唯一方法是检查字符串长度。我打赌没有人有这么长的密码。

答案 4 :(得分:0)

为什么你想在登录期间检查哈希密码。用户将哈希字符串作为密码。

你必须像这样检查

if (sha1($input_password) === 'your hased password') {
    //go ahead
}

答案 5 :(得分:0)

您可以在提交表单时哈希用户密码,这需要javascript ofcourse。

function myOnSubmit(aForm) {
    //Getting the password input object
    var inputPassword = aForm['password'];

    //Hashing the password before submitting
    inputPassword.value = sha512_hash(inputPassword.value);

    //Submitting
    return true;
}

您的表单将如下:

<form onsubmit="return myOnSubmit(this);">
<input type="text" name="login"><br>
<input type="password" name="password"><br>
<input type="submit" name="send">
</form>

据我所知,JS没有sha512原生函数,所以你需要sha512函数,你可以查看this