首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用RSA加密大文件?

如何用RSA加密大文件?
EN

Stack Overflow用户
提问于 2016-10-25 15:24:42
回答 2查看 12.3K关注 0票数 5

代码https://play.golang.org/p/CUEqjsJq5c

错误:

代码语言:javascript
复制
panic: crypto/rsa: message too long for RSA public key size

goroutine 1 [running]:
panic(0x4a6d80, 0xc420010420)
    /usr/local/go/src/runtime/panic.go:500 +0x1a1
main.main()
    /tmp/sample.go:28 +0xfa

文件大小811字节(用于测试加密自源文件)。我要加密一些更大的文件,1..500兆字节。我可以用RSA来做吗?或者需要使用其他的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-25 15:51:43

RSA只能加密小于(或等于)密钥长度的数据。

答案是使用对称算法(如AES )对数据进行加密,该算法旨在对大小数据进行加密。

如果需要RSA公钥/私钥对,则使用RSA加密对称密钥(AES)。这被称为混合加密,本质上是HTTPS加密数据的方式。

但是,可能不需要RSA加密对称密钥,除非需要公钥/私钥对。在一般情况下,我们只使用对称(AES)和那个键。公钥/私钥对的用例是什么?

票数 14
EN

Stack Overflow用户

发布于 2020-02-23 12:49:00

如果您不想对文件进行块处理,一种方法是:

  1. 在空中创建一个随机对称密钥R
  2. 使用对称密钥R加密大文件以创建EF=Sym(F, R)
  3. 用非对称RSA公钥加密对称密钥R以创建ER=ASym(PublicKey, R)
  4. 将加密文件EFER一起发送。

加密:

代码语言:javascript
复制
+---------------------+      +--------------------+
|                     |      |                    |
| generate random key |      |   the large file   |
|        (R)          |      |        (F)         |
|                     |      |                    |
+--------+--------+---+      +----------+---------+
         |        |                     |
         |        +------------------+  |
         |                           |  |
         v                           v  v
+--------+------------+     +--------+--+------------+
|                     |     |                        |
| encrypt (R) with    |     | encrypt (F)            |
| your RSA public key |     | with symmetric key (R) |
|                     |     |                        |
|  ASym(PublicKey, R) |     |     EF = Sym(F, R)     |
|                     |     |                        |
+----------+----------+     +------------+-----------+
           |                             |
           +------------+ +--------------+
                        | |
                        v v
         +--------------+-+---------------+
         |                                |
         |   send this files to the peer  |
         |                                |
         |     ASym(PublicKey, R) + EF    |
         |                                |
         +--------------------------------+

解密:

代码语言:javascript
复制
   +----------------+        +--------------------+
   |                |        |                    |
   | EF = Sym(F, R) |        | ASym(PublicKey, R) |
   |                |        |                    |
   +-----+----------+        +---------+----------+
         |                             |
         |                             |
         |                             v
         |   +-------------------------+-----------------+
         |   |                                           |
         |   |             restore key (R)               |
         |   |                                           |
         |   | R <= ASym(PrivateKey, ASym(PublicKey, R)) |
         |   |                                           |
         |   +---------------------+---------------------+
         |                         |
         v                         v
     +---+-------------------------+---+
     |                                 |
     |       restore the file (F)      |
     |                                 |
     |      F <= Sym(Sym(F, R), R)     |
     |                                 |
     +---------------------------------+
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40243857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档