繁体   English   中英

如何验证密码而不将其未加密发送到服务器

[英]How to verify a password without sending it unencrypted to a server

我要构建一个登录应用程序 ,该应用程序具有一个用于输入用户名和密码的客户端,以及一个服务器,然后该服务器接收用户名和密码。

然后,服务器应检查(确认)其收到的密码是否与已存储的哈希匹配。 我认为不将未加密的密码(仅以字符串形式)从客户端发送到服务器是很明智的,因此我已经在客户端使用BCrypt对其进行了加密。

但是现在我在服务器端有两个哈希,但是BCrypt仅提供了纯文本与哈希进行比较的方法,而不是将哈希与哈希进行比较的方法。

我现在应该以纯文本形式将密码发送到服务器,还是可以比较两个哈希?

谢谢你的帮助

“挑战-响应”是您应该在Google上搜索的术语。

原则:

在服务器端,您已经存储了哈希(加盐)密码和盐。

客户端首先发送登录名。

服务器在数据库中查找登录信息,并将其与随机字符串一起发送给客户端(这就是挑战)。

客户端现在必须通过以下方式计算加密的密码:将登录密码与salt连接并对其进行哈希处理。 将结果与质询中的随机字符串连接起来并对其进行哈希处理。 将结果发送到服务器。

服务器现在将散列的密码(存储在用户数据库中)与随挑战一起发送的随机字符串连接起来,并计算散列。 结果必须与从客户端收到的结果完全相同。

您可以从数据库中获取散列值并将其与发送值进行比较

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM