检查字符串是否为哈希值

问题描述

| 我正在使用SHA-512对我的密码进行哈希处理(当然是这样)。我不认为我想要的是可能的,但无论如何都要问。 有没有办法检查字符串是否已经是SHA-512(或其他算法)哈希? 用户登录后,我想检查一下他的密码。如果仍为纯文本格式,则应将其转换为安全格式。     

解决方法

您的任务非常简单,不需要检查字符串。 只需将输入的密码与第一个存储的密码进行比较即可。 如果匹配-这是纯密码。因此,您可以开始转换过程。     ,正如@zerkms已经提到的,字符串长度是您可以测试的最明显的东西。另外,哈希通常以十六进制表示,因此它仅由数字0到9和字符a到f组成。或作为正则表达式
/[0-9a-f]{64}/i
    ,这个问题让我有些困惑。 当用户在您的网站上输入他或她的密码时,您可以假定ѭ1name中的值(或任何您命名的名称)为纯文本。即使用户使用哈希函数的结果作为密码,也没关系,因为就您的应用程序而言,它仍然是纯文本。也就是说,无论用户使用什么哈希值创建哈希值,都必须使用该哈希值,因为将该值输入系统会导致该用户的访问。在服务器上对用户提交的密码进行哈希处理的目的是使您甚至都不知道该用户的密码。这样,如果您的数据库遭到破坏,则不会显示用户密码。 拥有密码后,便可以从数据库中检索用户的密码和哈希密码。您采用提交的表单,用用户特定的盐对它进行哈希处理,然后将其与数据库中的预加密密码进行比较。如果散列的提交和预散列的数据库值匹配,则可以假定输入了正确的密码。 我能看到按照您所描述的那样做事的唯一原因是,如果您以前曾以纯文本形式存储密码,现在正在将其全部转换为哈希值。在这种情况下,您只需为每个用户分配一个唯一的盐,对他们当前的纯文本密码+ salt进行哈希处理,然后将其存储为新密码。启用\“ hashwords \”时,应该一次全部执行此转换,而不是在用户首次在转换后登录时进行零碎的转换。     ,显然,唯一的猜测方法是检查字符串长度。我敢打赌,没有人拥有这么长的密码。     ,为什么您要在登录时检查哈希密码。没有用户将哈希字符串作为密码。 你必须这样检查
if (sha1($input_password) === \'your hased password\') {
    //go ahead
}
    ,您可以在用户提交表单时对用户密码进行哈希处理,这当然需要javascript。
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函数,您可以检查一下。