加密和解密Node.JS中的持久数据的最佳方式?

问题描述:

我在写一个Node.JS应用程序,它将聊天记录存储到数据存储区(即MongoDB)以及其他一些用户信息。我已经在使用bcrypt存储用户密码的盐渍散列,因此我在那里覆盖。加密和解密Node.JS中的持久数据的最佳方式?

加密持久数据的最佳方法是什么?我正在谈论敏感的用户数据,例如电话号码和聊天记录。如果我的数据库受到威胁,我不希望这些信息可用。

但是,我确实需要双向加密/解密,因为我需要能够使用纯文本值(即电话号码为Twilio,聊天记录供用户查看其旧消息) 。

我在研究node-crypto,但是我一直没能找到任何以高性能/实时方式做这件事的例子。

更新:我应该提到聊天“记录”是被推到“房间”中,当用户加入他们的实时全实际会话(即他们可以看到整个聊天记录,或在至少它的一个子集)。所以,我需要能够很快地进行加密和解密(如果不是实时的,至少需要某种工作进程)。

最好的办法是使用require('crypto')

然而,您将需要将其移植到客户端。祝你好运。 (用browserify不应该太难)

+0

嗯,有什么更好的,只使用它的服务器端(并发送明文给客户端,但使用HTTPS)或使用它在客户端,以及browserify? –

+0

看起来有实际可用的JS实现可用:http://code.google.com/p/crypto-js/ –

做所有的服务器端,如果你做它的客户端,你将需要公开你的加密密钥。

+0

不一定。对PBKDF的密钥使用公开密钥方案或Diffie-helman方案将允许浏览器客户端下载受密码保护的私钥和加密数据,并在客户端完全解密。这里不幸的是想办法在本地“存储”私钥。使用类似PersistJS的东西是可以的,这样私钥只会暴露给所有者,但要确保在会话过期后清理它们成为棘手的部分。 –

+0

他们仍然可以通过将关键变量写入控制台,像萤火虫一样访问。如果它们存储在浏览器存储中,则也可以查询它们。 –

+1

当然,但如果用户看到自己的私钥就好了,就像你可以'cat〜/ .ssh/id_rsa'并看到你的私钥。 –