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

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

我想知道的是:

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

谢谢

【问题讨论】:

    标签: c encryption openssl aes


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

    2. EVP 会处理它。

    3. 使用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())

    【讨论】:

      猜你喜欢
      • 2015-02-23
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多