客户端加密库



我正在编写一个通信网站应用程序。为了安全起见,应用程序在将信息存储在数据库中之前对密码和消息进行加密。在当前状态下,消息和密码从客户端(React(发送到服务器(Node.js(,在那里它们由bcrypt(服务器端(加密。当存储的消息由服务器从数据库中读取并发送到客户端时,它们由服务器预传输解密。

所以,我有几个问题。

  1. 服务器-客户端通信的风险因素是什么,其中它们之间的信息交换永远不会加密。

  2. 我应该费心加密信息吗?

  3. 如果我应该在传输之前对客户端上的信息进行加密,那么最好的客户端加密库是什么(在 React 上下文中,如果这有所作为(。

  4. 另外,我将如何向客户端发送加密的服务器信息,客户端使用
  5. 与bcrypt不同的技术对其进行解密;或者,我应该完全使用客户端加密,而服务器只是读取和写入加密信息,而不知道其内容。

任何帮助将不胜感激!提前谢谢你。

Talha 已经回答了你的问题,尽管我只会提供一些细节

服务器-客户端通信的风险因素是什么,其中它们之间的信息交换永远不会加密。

理论上,网络上每台数据传递的计算机都可以读取数据。现实甚至更糟 - 目前实施的WPA2安全wifi传输可能会被窃听。

我应该费心加密信息吗?

让我们改写一下您的问题:我应该加密传输信息吗?是的,没有理由不这样做(除非你懒惰地学习如何做(。使用HTTPS将确保机密性和完整性(没有人弄乱您的数据,并且您使用正确的服务器(。HTTPS今天变得可用。甚至还有免费的证书颁发机构服务(例如 letsencrypt.org(。

存储密码时,最好的选择是使用慢速加密哈希(是的,bcrypt 可以完成这项工作(。散列通常发生在服务器端。

我应该在客户端加密信息吗?大多数情况下,这不是最好的主意。问题是 - 您能够合理地管理加密密钥吗?确保数据完整性?确保服务器的身份?限制侧信道攻击的选项?TLS 为您完成所有工作。您将重新发明一个石轮,而已经有漂亮的充气橡胶轮胎。

如果我应该在传输之前对客户端上的信息进行加密,那么最好的客户端加密库是什么(在 React 上下文中,如果这有所作为(。

我使用CryptoJS库进行JS加密(我在服务器端使用它,但我相信这无关紧要(。

另外,我将如何向客户端发送加密的服务器信息,客户端使用

与bcrypt不同的技术对其进行解密;或者,我应该完全使用客户端加密,而服务器只是读取和写入加密信息,而不知道其内容。

只是 - 使用TLS(HTTPS(。在某些时候,您需要信任您的服务器。事实上,您仍然应该保护您的数据(例如设置密码(

您可以构建自己的加密通信协议(没有人可以阻止您(,但这会花费您很多时间,并且其安全性仍然非常值得怀疑(礼貌地说(。

在通信时,应始终使用安全的通信方法。例如,HTTPS。在处理套接字时,您可以使用Web套接字安全(WSS(,其中连接通过TLS/SSL加密。

如果您使用 HTTPS 和 WSS,您的通信已经使用 SSL 加密,因此除非绝对必要,否则您不应该费心在客户端加密数据。

bcrypt是由Niels Provos和David Mazières基于Hipfish密码设计的密码散列函数。哈希是不可逆的。创建哈希后,无法对其进行解密。 如果需要解密,可以使用AES256。有关AES的更多信息,您可以从维基百科开始

bcrypt是一种算法,可以用任何语言实现,而且bcrypt(npm包(是算法的实现。

最新更新