Javascript 若哈希密码在DB中,恶棍可以在登录时使用输入框中的哈希密码吗
我读了它,用它来做登录,保存密码的事情。据我所知,它解决的主要问题是,如果黑客能够访问您的数据库,而您没有散列密码,那么黑客就可以轻松地复制和粘贴用户名和密码并访问该帐户。该模块提供了比较哈希字符串和通过Javascript 若哈希密码在DB中,恶棍可以在登录时使用输入框中的哈希密码吗,javascript,node.js,mongodb,express,hash,Javascript,Node.js,Mongodb,Express,Hash,我读了它,用它来做登录,保存密码的事情。据我所知,它解决的主要问题是,如果黑客能够访问您的数据库,而您没有散列密码,那么黑客就可以轻松地复制和粘贴用户名和密码并访问该帐户。该模块提供了比较哈希字符串和通过req.body.password发送的密码的方法 我对散列的理解是,它需要一个文本并创建一个随机字符的长字符串。在应用程序中,字符串存储在mongoDBpassword字段中,这如何防止黑客将随机字符串复制粘贴到输入框中并像那样登录?所以我不明白散列的意义。如果你的密码、用户名和散列字符串存储
req.body.password
发送的密码的方法
我对散列的理解是,它需要一个文本并创建一个随机字符的长字符串。在应用程序中,字符串存储在mongoDB
password
字段中,这如何防止黑客将随机字符串复制粘贴到输入框中并像那样登录?所以我不明白散列的意义。如果你的密码、用户名和散列字符串存储在数据库中,那么是的,黑客可以使用该散列来解密所有内容。但是,如果有人正在嗅探您的登录/连接,那么他们将不会以明文形式获取您的用户名和密码,也不会获取哈希键。正如您所说,该函数将创建传递给它的字符串的哈希。散列不是随机的,而是无序的输入,使用相同的算法,输入结果将是相同的,无法解码。如果尝试散列,则散列密码将产生完全不同的结果
md5('password') = '5f4dcc3b5aa765d61d8327deb882cf99'
md5('5f4dcc3b5aa765d61d8327deb882cf99') = '696d29e0940a4957748fe3fc9efd22a3'
当用户想要登录时,他需要发送原始密码。然后,应用程序将再次计算密码的哈希值,并将其与存储的哈希值进行比较。如果用户发送散列,应用程序将再次计算散列,并且它将与数据库中的值不匹配 也许您的困惑来自于使用JavaScript,这表明您在客户端计算哈希值。散列应该在服务器端完成,用户发送原始密码,而不是通过internet发送散列。Primer 好的,让我们先看看真正发生了什么(在最佳情况下,尽管稍微简化):
Username Password
admin $2a$04$acaUVljoRAvazzj6YX7K2eEfUt9PHVVgr.ahZ4xLzb9292u4Bv9Sm
jdoe $2a$04$cTUGYHixAGwdTU90XflsI.G2FQuj/p4nVYW2Tp3HsCeUGs5MPmR.e
现在,当且仅当暴力是从哈希值计算输入数据的最简单方法时,哈希函数被认为是加密安全的。随着散列大小和计算能力的今天,你需要很长的时间来计算密码从他们的散列
按照上面描述的过程,虽然攻击者具有对数据库的读取权限,但他不能简单地获取哈希值并将其粘贴为密码–应用程序将获取哈希值,再次对其进行哈希,随后的匹配检查将失败。福利