Security 在web应用程序中实现密码加密和哈希的基本过程
我一直在寻找一个关于如何在典型的网站环境中实现密码登录系统的好解释。我读过一些很棒的维基百科文章,问答和博客等,但他们似乎总是专注于纯粹生成散列,而不是创建散列的整个过程——发送散列的哪些部分、存储散列的哪些部分、服务器端代码对散列做了什么等等。如果已经有一个很好的答案,那么我为重新发布道歉,请链接 我目前的理解是: 1) 新用户在您的网站上创建新帐户。他们输入一个“密码”,然后客户端代码生成并在末尾附加一个长随机字符串“salt”,并生成一个hash->BCrypt(password+salt),例如。然后,客户机代码将完整的散列加上未清除的盐发送到服务器 2) 服务器将完整的散列和未清除的salt存储在数据库中的users条目中 3) 在用户登录期间,他们键入密码,然后再次用盐散列 问题1)客户端代码如何为每个用户生成相同的“随机”盐值 问题2)在这一点上,客户端代码是否只发送不带salt的完整哈希 问题3)服务器端在收到完整散列后如何处理它?(只需将发送的完整哈希值与存储的完整哈希值进行比较?如果是这样的话,攻击者在侵入数据库并获取存储的完整哈希值时不能直接使用它们发送到服务器进行登录?这是基于我的假设,即登录过程基本上涉及服务器比较从数据库发送的完整哈希值。)将完整哈希存储在数据库中的e客户端Security 在web应用程序中实现密码加密和哈希的基本过程,security,hash,Security,Hash,我一直在寻找一个关于如何在典型的网站环境中实现密码登录系统的好解释。我读过一些很棒的维基百科文章,问答和博客等,但他们似乎总是专注于纯粹生成散列,而不是创建散列的整个过程——发送散列的哪些部分、存储散列的哪些部分、服务器端代码对散列做了什么等等。如果已经有一个很好的答案,那么我为重新发布道歉,请链接 我目前的理解是: 1) 新用户在您的网站上创建新帐户。他们输入一个“密码”,然后客户端代码生成并在末尾附加一个长随机字符串“salt”,并生成一个hash->BCrypt(password+salt
问题4)是否应始终通过安全连接发送密码?或者盐析和散列可以让任何人看到吗?你混淆了散列的目的。它不是为了保护有线传输的密码。客户端不生成哈希。散列的目的是防止危及数据库安全的攻击者能够快速使用预先生成的散列查找表来确定用户的密码 下面是一个简单的例子——正如@jhoyla在下面的评论中指出的,工业级生产计划甚至更为复杂 要创建帐户,请执行以下操作:
现在想象一下,密码是咸的。现在,即使两个人使用相同的密码,也会为他们每个人生成不同的salt,产生的哈希值也会不同。我无法知道哪些密码是弱密码,哪些是普通密码,哪些是强密码。我可以通过向每个可能的密码添加salt来尝试字典攻击,但是破解密码的难度(就时间而言)现在呈指数级增加。您混淆了哈希的目的。它不是为了保护有线传输的密码。客户端不生成哈希。散列的目的是防止危及数据库安全的攻击者能够快速使用预先生成的散列查找表来确定用户的密码 下面是一个简单的例子——正如@jhoyla在下面的评论中指出的,工业级生产计划甚至更为复杂 要创建帐户,请执行以下操作: