Go 中正确的非对称文件加密

Posted

技术标签:

【中文标题】Go 中正确的非对称文件加密【英文标题】:Proper asymmetric file encryption in Go 【发布时间】:2017-03-14 04:17:45 【问题描述】:

我需要一种方法来允许多人加密各种文件,但只有一方能够阅读所有文件。我按照各种在线示例在 Go 中编写了一个程序,但在某些时候我得到了以下错误:

Error from encryption: crypto/rsa: message too long for RSA public key size

RSA 是不是走错路了?如果我将文件分成多个块并加密它们可以吗?有没有我可以轻松使用的非对称分组密码?

我阅读了here 的讨论,据说 RSA 不是正确的方法。

你也可以举个例子吗?

【问题讨论】:

如果这是一个拥有大量用户的严肃项目,您确实需要让加密领域专家参与进来,那么安全性很难得到纠正。 【参考方案1】:

如果您需要对大于密钥大小的数据进行公钥非对称加密,则需要使用混合加密。本质上这就是 HTTPS 的工作原理。

Hybrid encryption 是使用 AES 等对称密钥加密对数据进行加密的地方,而该密钥使用 RSA 或 EC (Elliptic Curve) 加密等非对称密钥加密进行加密。

不要将文件分成多个块并加密它们。

【讨论】:

嗨!你觉得像 PGP 这样的东西会为我完成这项工作吗?我看到 golang 在其核心库中支持 PGP 实现:godoc.org/golang.org/x/crypto/openpgp【参考方案2】:

所以我最终使用了 GPG,我的服务有一个唯一的私钥,我与我的用户共享公钥。

【讨论】:

以上是关于Go 中正确的非对称文件加密的主要内容,如果未能解决你的问题,请参考以下文章

PHP基于openssl实现的非对称加密操作

比特币的非对称加密技术

区块链的非对称加密是什么技术

区块链中的非对称加密技术

区块链中的非对称加密技术

面试官:怎么设计大文件大数据场景下的传输加密方案?