为什么用户和密码要加密?

问题描述 投票:0回答:1

登录界面的朋友们大家好,我们在客户端使用 crypto.js 加密您的用户名和密码,或者在服务器端使用 md5 加密您的用户名和密码,并将其保存到数据库中。好吧,但我脑子里有两个问题

1.客户端加密的唯一目的是,如果黑客用snifer程序扫描wifi捕获了密码,他就无法登录。但是,例如我的密码是1234,当它加密时crpyto.js,这个的输出是 如果黑客再次输入密码xeeXX3^F,在服务器端又会是1234,那么加密还有什么意义呢?

2.服务器端加密完成后,我们再次加密保存到数据库中。如果黑客将数据库中md5创建的密码再次写入登录部分,服务器端的输出会不会是1234再次?既然全世界都不会犯错,那我哪里觉得错了谢谢

我做了加密,但我不明白逻辑

security cryptography cryptojs
1个回答
0
投票
  1. CryptoJS 是通过网络保护密码的好方法吗?

当通过网络发送密码时,对其进行加密(使用安全方法)可防止攻击者“嗅探”密码,然后使用该密码登录。

通常,“安全方法”意味着您正在使用适合该任务的算法进行加密(关键要素是加密信息的大小、保持安全所需的时间长度以及您需要投入的精力)在任一端执行加密)。实际上,最好的方法是使用传输层安全性 (TLS),这是实现 HTTPS 协议的现代方法。

在您给出的示例中,您没有说明 CryptoJS 是否是用于保护传输的唯一方法,或者是否也使用了 HTTPS。如果不阅读浏览器端登录例程的源代码,我无法判断您是否正在防范此方法的故障模式。但是,如果您使用 CryptoJS 仅加密用户名和密码,没有任何填充或唯一值,以便传输到服务器;如果您使用的密钥不会根据请求而更改,那么如果攻击者捕获了加密密码,他们可以在不知道原始密码的情况下将加密密码重播到您的服务器。这会破坏您的身份验证。

所以我会回答你的问题1,它可能无法为你使用CryptoJS的身份验证提供安全性,如果你将HTTPS与CryptoJS一起使用,那么它可能不会比单独使用HTTPS更好。

  1. MD5 适合存储密码吗?

首先我要说的是MD5不是一种加密算法。它是一种散列算法,与加密算法的区别在于没有指定的方式从输出值(存储的散列)返回到输入值(密码)。因此,针对具体问题,如果攻击者向服务器提供有效密码的 MD5 哈希,那么服务器执行的 MD5 哈希的输出将不是密码,而是两次应用 MD5 函数的输出密码。对于某些形式的加密算法,应用加密函数两次将返回原始值,但对于哈希算法则不然。

对于这是否足以存储密码的简短回答是“不太好”。 MD5 长期以来一直是这种情况的常用方法,但如果不使用所谓的“盐”,它就不是很安全。 “salt”是服务器已知的每个用户的随机值,并与提供的密码相结合。这可以防止相同或不同系统的用户之间共享密码的识别,从而防止来自散列密码列表的潜在攻击。添加盐后,它会更安全,但在过去十年左右的时间里,MD5 被认为低于良好安全性的阈值,因为在现代计算机上使用它执行哈希相对有效,并且它有几个加密弱点.

现在认为使用专门构建的哈希算法来存储密码更好,最常见的是 PBKDF2。

© www.soinside.com 2019 - 2024. All rights reserved.