加密和解密密码并通过http

时间:2016-04-27 07:40:51

标签: java spring spring-mvc

我收到了一个奇怪的要求(因为我觉得这是一个安全威胁)但不知怎的,我必须完成它......

要求是通过https发送密码。我在交换密码时应该使用什么加密和解密方法?

这是一个Web应用程序。密码不会存储在数据库中。

2 个答案:

答案 0 :(得分:0)

嗯有很多种方法,但主要提示是“不要自己写!”

最好的方法是拥有公共私钥,

您接收消息,并使用目标用户的公钥对其进行加密,然后使用您的私钥对消息进行签名。

然后在另一端,此人可以使用您的公钥验证您的签名,然后使用他们的私钥解密,获取未加密的邮件。

这是长篇大论,通常也不会存储密码。 发送密码的目的是什么?如果说是登录到SSO服务器,那么为什么不通过加密密码。

所以你说得到密码的MD5哈希+一个隐藏的短语,将得到的哈希发送到另一方,然后将其与相同但从最终的条目进行比较。有一些方法可以在不发送密码的情况下验证人员。 OpenID恰好使用,您登录Facebook,然后当网站要求验证您是谁(使用Facebook登录)时,它会发送您的电子邮件和在您的浏览器上注册的令牌(如果您已登录到Facebook)或提示你在Facebook网站上的密码。

然后它会传回一小段数据,其中包含您的电子邮件地址,姓名和令牌。此令牌现在是该站点的登录令牌(因为它使用站点ID作为令牌的一部分),允许您进入站点而无需再次登录(直到令牌过期)

所以网站在任何时候都没有获得你的Facebook密码,因为他们只是获得了身份验证令牌。

答案 1 :(得分:0)

我假设你想使用密码进行身份验证。

HTTPS,如果操作正确,将充分保护您的传输。如果您无法屏蔽密码,则可以依赖HTTPS的传输安全性。

如果可以,您应该使用scrypt来屏蔽密码,然后再通过网络发送密码,然后再将密码存储到数据库中。

准备使用scrypt库用于java(以及可以在客户端使用的javascript)。不要自己编码。

这样,实际的密码永远不会离开客户端,任何能够听取连接的人都无法做到这一点。即使某些攻击者获取了您的数据库,他也无法计算实际密码。

请勿使用MD5,因为获得存储密码访问权限的攻击者可以从中计算原始密码。 MD5 is unsafe为此目的。