2016-04-27 190 views
1

我收到一个奇怪的规定(因为我觉得这是一个安全威胁),但不知何故,我必须完成它通过HTTP密码和共享......加密和解密

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

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

+2

https已经加密,所以你可以发送清楚。 – Henry

+0

正如亨利所说,Https已经被加密,但是,如果你想加密密码,使用MD5 – Sapikelio

+0

@Sapikelio MD5是一个消息摘要,你不能使用它进行加密。它很久以前就被用于密码哈希,但几年来它已被认为是不安全的。 – Kayaman

回答

0

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

最好的办法是将有公私密钥,

你把该消息,并与目标用户的公钥加密,并签署与你的私钥对消息。

然后在另一端,用户可以用您的公钥验证您的签名,然后使用他们的私钥解密并获取未加密的消息。

这是很长的啰嗦,通常密码永远不会存储。 发送密码的目的是什么?如果是登录到SSO服务器,那么为什么不通过加密密码。

所以你说得到MD5哈希密码+一个隐藏的短语,把结果散列发送到另一端,然后谁将它们相比,但从他们的最后条目相同。有许多方法可以在不发送密码的情况下验证人员OpenID正是使用这种方式,你登录到Facebook,然后当一个网站要求验证你是谁时(使用Facebook登录),它会发送你的电子邮件和一个在你的浏览器上注册的令牌(如果你已经登录到Facebook)或提示你在Facebook上的密码。

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

因此,当网站刚刚获得身份验证令牌时,该网站是否会获得您的Facebook密码?

+0

您不应该为此使用MD5。它的破碎,安全明智,而不是使用scrypt。 –

+0

有关MD5情况的详细信息:https://en.wikipedia.org/wiki/MD5#Security –

+0

这只是一个建议,我用它作为一种不通过线路发送密码的方法 –

0

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

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

如果可以,您应该使用scrypt在通过网络发送密码之前屏蔽密码,并在将密码存储到数据库之前再次屏蔽。

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

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

不要为此使用MD5,因为那么获得访问存储密码的攻击者就可以从中计算出原始密码。 MD5 is unsafe为此目的。

+0

但是SCrypt是一种可逆加密,MD5和类似的哈希是单向加密 –

+0

@ TheresaForster不是。一点都不,永远。请阅读该系统的功能。 –

+0

@TheresaForster我建议阅读关于这些安全性的这篇http://security.blogoverflow.com/2013/09/about-secure-password-hashing/文章。他们把它带到了我可以做得更好的地步。 –