使用非对称密码保护文件

我知道非对称密码是如何工作的。 我知道有两个键(一个私人和一个公共)。

当有人想要沟通时,他们使用这些公钥来交换他们的公钥encryption消息,然后相应的消息只能由拥有私钥的用户解密。

现在,我正在使用Node.js,我需要做这样的事情…

我需要一个应用程序,每个小时读取一个数据库,提取数据并将其保存到一个文件,我需要发送到另一台服务器。
我的问题是,我不希望该文件将被其他人看到,我使用SSH传输,所以没有问题,但我必须encryption该文件,因为我不是该服务器的pipe理员所以也许有人可以读它。 不幸的是,两台服务器的pipe理员都是一样的。 所以我的想法是用公钥encryption文件,然后只有拥有私钥的人才能解密。

我认为这是毫无意义的使用像这样的东西:

var key = 'blablabla' 

如果我使用公钥,没有问题,所有人都可以阅读……确实是公开的。 但是用这个公钥,没有人可以解密这个消息,所以就像单向encryption一样。

现在,有人可以告诉我是否需要签名者/validation者来完成这项工作,或者我可能需要使用openssl生成两个密钥(public / private),并将这些密钥传递给密码/ dechiper?

我在看密码模块,但没有例子….

一般来说,你的想法是正确的 – 你使用公钥进行encryption,并使用你的私钥进行解密。 但是,实际上程序更复杂。 生成随机对称密钥,并使用该密钥对数据进行encryption。 然后公钥被用来encryption随机密钥。 encryption密钥与encryption数据一起发送给收件人。 另一方面,使用私钥对encryption的密钥进行解密,然后对数据进行解密。

您可以使用OpenPGP密钥或X.509证书来完成这项工作。

在OpenPGP的情况下,该标准提供encryption和解密作为primefaces程序(在用户级别上)。 对于X.509证书,您需要使用PKCS#7 / CMS。

OpenSSL库提供PKCS#7 / CMS的操作,但是当我查看OpenSSL的nodeJS API时,该API非常有限,并且不公开这些函数。 也许你可以编写自己的nodeJS模块,它将与OpenSSL接口并提供缺less的function。

另一种方法是使用OpenPGP密钥和node-gpg模块。 该模块使用gnupg来完成实际的工作,所以必须安装gnupg。

不幸的是我没有在nodeJS wiki中提供的第三方模块列表中看到其他合适的库。