AES 加密 - 大文件

Posted

技术标签:

【中文标题】AES 加密 - 大文件【英文标题】:AES Encryption- large files 【发布时间】:2011-08-03 19:15:09 【问题描述】:

我在 128/192/256 cbc 模式下使用 C 语言 OpenSSL 的 EVP 接口进行 AES 加密。 我在 *** 中找到了一个很好的例子,我已经开始编程了。

我想知道的是:

    加密时使用的默认填充是什么? 如果我有大量数据会发生什么。我是否必须编码才能将其划分为 128 位的数据块?还是 EVP 接口负责处理它? 对于 128bit、192bit 和 256bit cbc 模式,IV 的大小应该是多少(只有密钥长度分别为 128、192、256,块大小始终为 128)

谢谢

【问题讨论】:

【参考方案1】:

    没有用于加密的默认填充。有几种填充方案。对于 EVP,有一个 encrypt final 方法,它采用不完整的块并添加填充(默认 PKCS 填充)并对其进行加密。

    EVP 会处理它。

    使用CBC模式时IV向量的大小与块大小相同。

【讨论】:

所以只要有数据,我应该继续调用 EVP_EncryptUpdate 吗?我实际上有一个可变长度的大数据(大至 1GB)。我一直将数据划分为 1024 位的块(就像那样)。我应该继续调用这些块的 EVP 更新吗? 如果由于大尺寸而将它们拆分为 1024 位,则需要对每个块调用 EVP 更新,直到遇到需要添加填充并因此调用 encrypt final 的最后一个块。跨度> 我们应该总是知道明文的长度来调用 EVP_Decrypt 例程吗?或者说对于 1024 的固定纯文本块,我们应该在 EVP_DecryptUpdate 块上传递的长度是多少??【参考方案2】:

您可以使用EVP_CIPHER_iv_length() 来确定密码的IV 大小,例如EVP_CIPHER_iv_length(EVP_aes_128_cbc())

【讨论】:

以上是关于AES 加密 - 大文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 openssl smime 加密大文件

用php加密大文件的最佳方法

你如何在 Go 中加密大文件/字节流?

如何使用 AES 加密创建 Java 密钥库 (.jks) 文件

密码技术应用--AES文件加解密

对称加密及AES加密算法