如何在Golang中使用AES256-GCM加密文件?

能够。

AES256-GCM可以在https://gist.github.com/cannium/c167a19030f2a3c6adbb5a5174bea3ff中实现

但是,Seal接口方法cipher.AEAD具有签名:

Seal(dst, nonce, plaintext, additionalData []byte) []byte

因此,对于非常大的文件,必须将所有文件内容读入内存,这是不可接受的。

一种可能的方法是上实现Reader/Writer接口,但是难道不应该由AEAD的那些分组密码“模式”来解决吗?所以我想知道这是否是golang密码库的设计错误,还是我错过了GCM重要的东西?SealOpen

阿格尔

不应使用AEAD一次性加密大量数据。API旨在阻止这种情况。

通过一次操作对大量数据进行加密意味着a)所有数据都必须保存在内存中,或者b)API必须通过返回未经身份验证的纯文本以流方式进行操作。

返回未经身份验证的数据很危险,在互联网上找到建议诸如此类东西并不难gpg -d your_archive.tgz.gpg | tar xz因为gpg命令还提供了流接口。

当然,使用AES-GCM之类的结构,如果应用程序在处理之前不对明文进行身份验证,则很容易随意操纵明文。即使应用程序小心不要在确定了真实性之前才将纯文本“释放”到UI,流设计也会暴露更多的程序攻击面。

通过规范大密文并因此对API进行流处理,随之而来的下一个协议更可能在没有意识到问题的情况下使用它们,因此问题仍然存在。

优选地,纯文本输入将被分块为相当大的部分(例如16KiB)并分别进行加密。这些块仅需要足够大,以使来自其他认证器的开销可以忽略不计。通过这种设计,无需处理未经身份验证的纯文本就可以增量处理大型消息,并且AEAD API可以更安全。(更不用说可以处理更大的消息了,因为一个AES-GCM对单个纯文本有64GiB的限制。)

需要进行一些思考以确保块的顺序正确,即通过计数随机数,第一个块应在第一位,即通过将随机数从零开始,最后一个块应在最后,即通过添加一个空值。 ,带有特殊附加数据的终止符块。但这并不难。

有关示例,请参见miniLock中使用的分块

即使采用这种设计,攻击者仍然可能导致邮件被可检测地截断。如果您想要更高的目标,则可以使用全有或全无的变换,尽管这需要对输入进行两次传递并且并不总是可行的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Matlab中使用AES256加密/解密图像

来自分类Dev

如何在Delphi中使用AES-256 GCM进行加密

来自分类Dev

如何使用CryptoJs正确加密AES256的方法

来自分类Dev

如何使用AES256加密“sam package”?

来自分类Dev

如何使用可以使用gpg解密的对称AES256用Ruby加密文件?

来自分类Dev

如何使用可以使用gpg解密的对称AES256用Ruby加密文件?

来自分类Dev

如何在Android中使用256位AES加密

来自分类Dev

这是AES GCM文件加密的好习惯吗?

来自分类Dev

在目标 c 中,如何使用 md5 作为密钥进行 AES256 加密?

来自分类Dev

C#解密AES256加密文件

来自分类Dev

Java使用aes256 / CBC / PKCS7Padding加密文件

来自分类Dev

如何在python中使用加密的RSA私钥(AES-256-CBC)对数据进行签名

来自分类Dev

如何在不安装AWS开发工具包的情况下通过AES256加密通过Powershell将文件上传到S3?

来自分类Dev

如何打开.aes256文件

来自分类Dev

在iOS中实现AES256加密

来自分类Dev

解密AES256加密字节

来自分类Dev

无法解密AES256加密文本

来自分类Dev

如何加密-解密Node.js加密aes256密码

来自分类Dev

如何加密-解密Node.js加密aes256密码

来自分类Dev

使用AES加密文件

来自分类Dev

使用AES加密文件

来自分类Dev

AES256 JAVA 加密与 C# 加密不匹配

来自分类Dev

7za创建AES256密码保护的文件夹的加密zip

来自分类Dev

如何处理BadPaddingException在C#中AES256加密和解密在Java中

来自分类Dev

Logstash的S3输出插件:使用AES256的服务器端加密

来自分类Dev

如何使用OpenSSL和AES-256和SHA-256加密文件?

来自分类Dev

如何在Linux中不创建未加密文件的情况下读取openssl aes-256-cbc加密文件?

来自分类Dev

无法在使用Swift CryptoKit加密的NodeJS中解密数据-AES-256-GCM

来自分类Dev

AES256在目标C中加密以使用PHP rijndael_256 ECB_MODE进行处理

Related 相关文章

  1. 1

    在Matlab中使用AES256加密/解密图像

  2. 2

    如何在Delphi中使用AES-256 GCM进行加密

  3. 3

    如何使用CryptoJs正确加密AES256的方法

  4. 4

    如何使用AES256加密“sam package”?

  5. 5

    如何使用可以使用gpg解密的对称AES256用Ruby加密文件?

  6. 6

    如何使用可以使用gpg解密的对称AES256用Ruby加密文件?

  7. 7

    如何在Android中使用256位AES加密

  8. 8

    这是AES GCM文件加密的好习惯吗?

  9. 9

    在目标 c 中,如何使用 md5 作为密钥进行 AES256 加密?

  10. 10

    C#解密AES256加密文件

  11. 11

    Java使用aes256 / CBC / PKCS7Padding加密文件

  12. 12

    如何在python中使用加密的RSA私钥(AES-256-CBC)对数据进行签名

  13. 13

    如何在不安装AWS开发工具包的情况下通过AES256加密通过Powershell将文件上传到S3?

  14. 14

    如何打开.aes256文件

  15. 15

    在iOS中实现AES256加密

  16. 16

    解密AES256加密字节

  17. 17

    无法解密AES256加密文本

  18. 18

    如何加密-解密Node.js加密aes256密码

  19. 19

    如何加密-解密Node.js加密aes256密码

  20. 20

    使用AES加密文件

  21. 21

    使用AES加密文件

  22. 22

    AES256 JAVA 加密与 C# 加密不匹配

  23. 23

    7za创建AES256密码保护的文件夹的加密zip

  24. 24

    如何处理BadPaddingException在C#中AES256加密和解密在Java中

  25. 25

    Logstash的S3输出插件:使用AES256的服务器端加密

  26. 26

    如何使用OpenSSL和AES-256和SHA-256加密文件?

  27. 27

    如何在Linux中不创建未加密文件的情况下读取openssl aes-256-cbc加密文件?

  28. 28

    无法在使用Swift CryptoKit加密的NodeJS中解密数据-AES-256-GCM

  29. 29

    AES256在目标C中加密以使用PHP rijndael_256 ECB_MODE进行处理

热门标签

归档