2011-07-27 40 views
3

我在寫一個Node.JS應用程序,它將聊天記錄存儲到數據存儲區(即MongoDB)以及其他一些用戶信息。我已經在使用bcrypt存儲用戶密碼的鹽漬散列,因此我在那裏覆蓋。加密和解密Node.JS中的持久數據的最佳方式?

加密持久數據的最佳方法是什麼?我正在談論敏感的用戶數據,例如電話號碼和聊天記錄。如果我的數據庫受到威脅,我不希望這些信息可用。

但是,我確實需要雙向加密/解密,因爲我需要能夠使用純文本值(即電話號碼爲Twilio,聊天記錄供用戶查看其舊消息) 。

我在研究node-crypto,但是我一直沒能找到任何以高性能/實時方式做這件事的例子。

更新:我應該提到聊天「記錄」是被推到「房間」中,當用戶加入他們的實時全實際會話(即他們可以看到整個聊天記錄,或在至少它的一個子集)。所以,我需要能夠很快地進行加密和解密(如果不是實時的,至少需要某種工作進程)。

回答

4

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

然而,您將需要將其移植到客戶端。祝你好運。 (用browserify不應該太難)

+0

嗯,有什麼更好的,只使用它的服務器端(併發送明文給客戶端,但使用HTTPS)或使用它在客戶端,以及browserify? –

+0

看起來有實際可用的JS實現可用:http://code.google.com/p/crypto-js/ –

0

做所有的服務器端,如果你做它的客戶端,你將需要公開你的加密密鑰。

+0

不一定。對PBKDF的密鑰使用公開密鑰方案或Diffie-helman方案將允許瀏覽器客戶端下載受密碼保護的私鑰和加密數據,並在客戶端完全解密。這裏不幸的是想辦法在本地「存儲」私鑰。使用類似PersistJS的東西是可以的,這樣私鑰只會暴露給所有者,但要確保在會話過期後清理它們成爲棘手的部分。 –

+0

他們仍然可以通過將關鍵變量寫入控制檯,像螢火蟲一樣訪問。如果它們存儲在瀏覽器存儲中,則也可以查詢它們。 –

+1

當然,但如果用戶看到自己的私鑰就好了,就像你可以'cat〜/ .ssh/id_rsa'並看到你的私鑰。 –