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

Java 比较同一来源的两个BCRYPTed密码,java,bcrypt,Java,Bcrypt,我正在使用BCRYPT在数据库上散列用户密码,由于来自客户端的连接可能并不总是安全的,因此我希望避免在身份验证时以明文形式将其发送到服务器。我们正在使用Java/Spring的BCRYPT实现 有没有办法比较同一来源的两个哈希值 如果没有(可能是这样):实现类似安全级别的最佳解决方案是什么 谢谢你的建议 您需要通过RSA设置公钥/私钥加密,就像SSL中使用的那样。其概念是这样的:服务器具有任何客户端都可以请求的公钥。客户端使用该公钥对信息进行加密,然后再将其发送到服务器。服务器使用其私钥解密

我正在使用BCRYPT在数据库上散列用户密码,由于来自客户端的连接可能并不总是安全的,因此我希望避免在身份验证时以明文形式将其发送到服务器。我们正在使用Java/Spring的BCRYPT实现

  • 有没有办法比较同一来源的两个哈希值
  • 如果没有(可能是这样):实现类似安全级别的最佳解决方案是什么

谢谢你的建议

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

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

在客户端加密之前,最好先加上时间戳,以增加熵。

你不能

BCrypt是一个单向函数。您可以运行
bcrypt(“password”)
两次,两次都会得到不同的结果,并且无法知道这两个哈希值是针对同一个密码的

这是一个安全特性,不是bug


与其尝试这种方法,不如将重点放在通过实施SSL和可能的HST来保护通信通道上。

我不理解你的问题,我可能不是一个人。可能的答案是?谢谢Marko,这里有一个例子:-用户的pw是p,它的bcrypt哈希是H。使用bcrypt,每次生成时H都会不同(H1、H2、H3,…)-处理身份验证的常用方法是生成H1并将其存储在服务器上,然后用户发送P进行身份验证。-由于P用于其他目的,并且非常敏感,我不希望用户发送P进行身份验证。-另一个解决方案是让用户发送H2并在服务器上存储P,这也不是一个好主意,原因很明显。-我想做的是让用户发送H2,而与H1相比,你不能,而且发送散列密码不会带来安全性方面的好处(参见Joe发布的链接)。在服务器端对密码进行哈希处理与在传输过程中保护密码无关。底线是,您应该为所有交互使用HTTPS/SSL连接,其中这些交互的子集需要传递安全数据(如密码)。