2011-12-16 74 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