如何使用 socket.io、nodejs 和 vanilla js 在不向客户端公开密钥的情况下加密和解密数据?

How to encrypt and decrypt data without exposing keys with client using socket.io,nodejs, and vanilla js?

我正在制作一个网络聊天应用程序,我应该在客户端加密和解密消息,或者我应该依赖 tcl 如果我应该 encrpyt 那么我怎样才能做到这一点而不在客户端暴露任何东西

我正在使用 nodejs,socket.io,而 vanilla javascript 帮助我提供了一些代码示例,感谢您抽出宝贵的时间

这里最常见的解决方案是使用 public 密钥加密的非对称加密,您与客户端共享服务器的 public 密钥,客户端与您共享它的 public 密钥。私钥不共享。客户端使用服务器的 public 密钥加密数据,服务器使用其私钥解密。以其他方式发送数据时反之亦然。完全在 Javascript 中安全地实现自己是一件很麻烦的事情,而且很容易犯下引入漏洞的错误。

但是,幸运的是,您不必这样做,因为如果您只是使用 https 作为 socket.io 连接的传输,那么所有 public 密钥加密都是完全为你完成(在 https 使用的 TLS 实现中),你不仅有一个完全加密的端到端通道来发送你的消息,而且你也有域欺骗保护,因为浏览器将验证服务器证书匹配URL 正在使用中。

所以,只需通过 https 建立 socket.io 连接即可。