【问题标题】:What is the most appropriated and secure way to encrypt files using private/public keys in Node.js在 Node.js 中使用私钥/公钥加密文件的最合适和最安全的方法是什么
【发布时间】:2019-03-26 17:48:00
【问题描述】:

我想知道在我的 node.js 应用程序中加密和解密文件时应该在哪个用例中使用这些方法。

问题

我想加密我服务器中的一些文件,在询问其他人之后,我意识到最推荐的方法是使用私钥加密这些文件(大)。

现在,我正在寻找 docs 并看到了这些方法

  • crypto.publicEncrypt(pubKey, buffer)
  • crypto.publicDecrypt(pubKey, buffer)
  • crypto.privateEncrypt(privKey, buffer)
  • crypo.privateDecrypt(privKey, buffer)

这很令人困惑,因为我不知道我现在必须使用它们中的哪一个,啊……我不知道什么是最合适的安全方式。

【问题讨论】:

  • 不幸的是,密码学很复杂,像“最推荐的方法是 XYZ”这样的不合格陈述不是专家会说的话。这取决于您的系统、访问模型和威胁模型。可能是简单的基于密码的密码学对您的需求是正确的,也可能不是。另一个问题是您正在查看的 API 非常低级,需要专家才能正确使用。您应该寻找具有良好声誉的更高级别的 API。

标签: node.js encryption public-key-encryption private-key public-key


【解决方案1】:

tl;dr 使用公钥加密。妥善保管您的私钥。

不幸的是,这些方法的名字很糟糕。 privateEncrypt 应称为 sign,publicDecrypt 应称为 verify。

使用公钥加密(也称为非对称加密)时,可以使用一个密钥来编写密码,而另一个密钥可以撤消该操作。您的公钥可能为所有人所知,而您的私钥是秘密的。

如果您想对某些内容保密,除了某个密钥的所有者之外,您想用他们的公钥加密消息。因此,如果 Alice 想要接收加密的消息,她将分享她的公钥 A_pub 和她的秘密密钥 A_priv,她会保密。您将加密您的消息 crypto.publicEncrypt(A_pub, buffer)。然后她将使用crypto.privateDecrypt(A_priv, buffer) 解密该消息。

另一种方式称为digitial signature。

【讨论】:

  • 当我尝试使用公钥加密文件时,它说内容对于这个密码来说太长了。
  • 简而言之,您应该更喜欢混合加密。为文件的对称加密(如AES)创建一个随机密钥,然后加密,使用接收方公钥加密的密钥发送文件。见,sealedboc
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 2017-01-04
  • 2018-08-10
  • 2015-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多