OpenSSL EVP_CIPHER_CTX更新IV

时间:2017-08-07 13:28:04

标签: encryption openssl cryptography aes

我正在使用具有AES_ctr_128模式的OpenSSL EVP_Encrypt API。我试图检索更新的(增量计数器) 在OpenSSL 1.1.0中,我们不能简单地执行:

game.load.spritesheet('chicken','chicken_spritesheet.png', 131,200,3);

因为隐藏了ctx结构(使用上面的代码得到不完整的类型错误)。

此字段也没有任何获取API。

有没有办法让更新的IV缓冲区存储在EVP_CIPHER_ctx结构中(增量IV)?

1 个答案:

答案 0 :(得分:0)

仅当您为密码写入固定数量的块(AES大小为16)时,仅IV就足够了。所以你需要跟踪所写的数据量。

要检索计数器值,因此您可以更轻松地自行计算。然后,您可以重新启动特定IV的密码流。请注意,在继续操作之前,您可能仍需要跳过一定量的普通文件或密文,例如加密零值字节。

因此,要计算计数器值,只需执行IV的处理,并处理完整块的数量:len(pt) / n其中len是字节长度,n = 16使用整数除法。 IV由nonce和初始计数器值组成固定大小的大端数。所以你可以用整数的每个字节添加IV的每个字节,从右到左可能的进位(最低有效字节的高索引,最高有效字节的低索引)。

要计算需要跳过的字节数(即在密钥流再次同步之前加密/解密,您只需计算len(pt) % n,其中%是余数或模数运算符。