比较同一来源的两个BCRYPTed密码

时间:2014-09-16 10:24:49

标签: java bcrypt

我正在使用BCRYPT在数据库上散列我们用户的密码,因为来自客户端的连接可能并不总是安全的,所以我希望在验证时不要将其发送到服务器纯文本。我们正在使用Java / Spring的BCRYPT实现。

  • 有没有办法比较同一来源的两个哈希值?
  • 如果不是(可能就是这种情况):达到类似安全级别的最佳解决方法是什么。

感谢您的建议。

2 个答案:

答案 0 :(得分:1)

你不能。

BCrypt是单向函数。您可以运行bcrypt("password")两次,两次都会得到不同的结果,并且无法知道这两个哈希是否使用相同的密码。

这是一项安全功能,而不是错误。

而不是尝试这种方法,而是应该通过实施SSL和可能的HSTS来专注于保护通信渠道。

答案 1 :(得分:0)

您需要通过RSA设置公钥/私钥加密,就像在SSL中使用一样。这个概念是这样的:服务器有一个公钥,任何客户都可以请求。客户端使用该公钥在将信息发送到服务器之前对其进行加密。服务器使用其私钥解密信息(然后使用您的bcrypt哈希函数对其进行重新加密)。

RSA旨在促进这种范例:信息可以使用公钥自由加密,但公钥无法解密。只有私钥才能用于解密。

在客户端加密以增加熵之前加上时间戳也是个好主意。