我正在使用具有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)?
答案 0 :(得分:0)
仅当您为密码写入固定数量的块(AES大小为16)时,仅IV就足够了。所以你需要跟踪所写的数据量。
要检索计数器值,因此您可以更轻松地自行计算。然后,您可以重新启动特定IV的密码流。请注意,在继续操作之前,您可能仍需要跳过一定量的普通文件或密文,例如加密零值字节。
因此,要计算计数器值,只需执行IV的处理,并处理完整块的数量:len(pt) / n
其中len
是字节长度,n = 16
使用整数除法。 IV由nonce和初始计数器值组成固定大小的大端数。所以你可以用整数的每个字节添加IV的每个字节,从右到左可能的进位(最低有效字节的高索引,最高有效字节的低索引)。
要计算需要跳过的字节数(即在密钥流再次同步之前加密/解密,您只需计算len(pt) % n
,其中%
是余数或模数运算符。