我正在使用BCRYPT在数据库上散列我们用户的密码,因为来自客户端的连接可能并不总是安全的,所以我希望在验证时不要将其发送到服务器纯文本。我们正在使用Java / Spring的BCRYPT实现。
感谢您的建议。
答案 0 :(得分:1)
你不能。
BCrypt是单向函数。您可以运行bcrypt("password")
两次,两次都会得到不同的结果,并且无法知道这两个哈希是否使用相同的密码。
这是一项安全功能,而不是错误。
而不是尝试这种方法,而是应该通过实施SSL和可能的HSTS来专注于保护通信渠道。
答案 1 :(得分:0)
您需要通过RSA设置公钥/私钥加密,就像在SSL中使用一样。这个概念是这样的:服务器有一个公钥,任何客户都可以请求。客户端使用该公钥在将信息发送到服务器之前对其进行加密。服务器使用其私钥解密信息(然后使用您的bcrypt哈希函数对其进行重新加密)。
RSA旨在促进这种范例:信息可以使用公钥自由加密,但公钥无法解密。只有私钥才能用于解密。
在客户端加密以增加熵之前加上时间戳也是个好主意。