我知道非对称加密是如何工作的。我知道有两个键(一个私钥和一个公钥)。
当有人想要进行通信时,他们交换公钥会使用这些公钥加密消息,然后相应的消息只能由拥有私钥的用户解密。
现在,我使用Node.js,我需要做这样的事情......
我需要一个应用程序,每小时读取一个数据库,提取数据并将其保存到我需要发送到另一台服务器的文件中。
我的问题是,我不希望其他人看到该文件,我使用SSH进行传输,所以没有问题但是
我必须加密该文件,因为我不是该服务器的管理员所以也许有人可以阅读它。不幸的是,两个服务器的管理员都是一样的。
所以我的想法是用公钥加密文件,然后只有拥有私钥的人(我)可以解密它。
我认为使用类似的东西毫无意义:
var key = 'blablabla'
如果我使用公钥,没有问题,所有人都可以阅读它......它确实是公开的。但是使用这个公钥,没有人可以解密消息,所以它是 类似于单向加密的东西。
现在,有人可以告诉我是否需要签名者/验证者来完成这项工作,或者我可能需要使用openssl生成两个密钥(公共/私有)并将这些密钥传递给密码/ dechiper?
我正在看加密模块,但没有例子......
答案 0 :(得分:4)
通常,您的想法是正确的 - 您使用公钥加密并使用您的私钥进行解密。然而,实际上程序更复杂。生成随机对称密钥,并使用该密钥加密数据。然后公钥用于加密随机密钥。加密密钥与加密数据一起发送给收件人。另一方面,使用私钥解密加密密钥,然后解密数据。
您可以使用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中提供的第三方模块列表中没有看到任何其他合适的库。