2011-12-16 77 views
1

我知道非對稱加密技術是如何工作的。我知道有兩個密鑰(一個私人密鑰和一個公共密鑰)。使用非對稱加密技術保護文件

當有人想要溝通時,他們用這些公鑰交換他們的公共密鑰加密消息,然後相應的消息只能由擁有私鑰的用戶解密。

現在,我使用Node.js的,我需要做這樣的事情......

我需要每個小時讀取數據庫中提取數據,並將其保存到我需要一個文件的應用程序發送到另一臺服務器。
我的問題是,我不希望該文件將被其他人看到,我使用SSH傳輸,所以沒有問題,但我 我必須加密該文件,因爲我不是該服務器的管理員所以也許有人可以閱讀它。不幸的是,兩臺服務器的管理員都是一樣的。 所以我的想法是用公鑰加密文件,然後只有擁有私鑰(我)的人才能解密它。

我覺得它使用類似是沒有意義的:

var key = 'blablabla' 

如果我使用一個公共密鑰,是沒有問題的,都可以讀取它.....它是公共的確實。但是使用這個公鑰,沒有人可以解密這條消息,所以它就像單向加密那樣是 。

現在,有人可以告訴我是否需要簽署者/驗證者來完成這項工作,或者我必須使用openssl生成兩個密鑰(public/private)並將這些密鑰傳遞給密碼/ dechiper?

我期待在密碼模塊,但目前還沒有實例....

回答

3

一般情況下,你的想法是正確的 - 你加密使用公開密鑰和解密使用你的私鑰。但是,實際上程序更復雜。生成隨機對稱密鑰並使用該密鑰對數據進行加密。然後公鑰被用來加密隨機密鑰。加密密鑰與加密數據一起發送給收件人。另一方面,使用私鑰對加密密鑰進行解密,然後對數據進行解密。

您可以使用OpenPGP密鑰或X.509證書來完成這項工作。

對於OpenPGP,標準提供加密和解密作爲原子程序(在用戶級別)。對於X.509證書,您需要使用PKCS#7/CMS。

OpenSSL庫提供PKCS#7/CMS操作,但是當我查看OpenSSL的nodeJS API時,該API非常有限,並且不公開這些函數。也許你可以編寫自己的nodeJS模塊,它將與OpenSSL接口並提供缺少的功能。

另一種選擇是使用OpenPGP密鑰和node-gpg模塊。該模塊使用gnupg來完成實際的工作,所以必須安裝gnupg。

不幸的是,我沒有在nodeJS wiki中提供的第三方模塊列表中看到其他合適的庫。

+0

使用OpenPGP代替OpenSLL有沒有區別?兩者均使用PKCS#7/CMS – Dail 2011-12-16 09:24:37