gpt4 book ai didi

encryption - OpenSSL EVP_CIPHER_CTX 获取更新 IV

转载 作者:行者123 更新时间:2023-12-02 16:19:57 28 4
gpt4 key购买 nike

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

    EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
/*
EVP_EncryptInit(ctx, ...);
EVP_EncryptUpdate(ctx, ...);
EVP_EncryptFinal(ctx, ...);
*/
memcpy(iv, ctx->iv, sizeof(ctx->iv);

因为 ctx 结构被隐藏(上面的代码出现不完整类型错误)。

此外,该字段没有任何 get API。

有什么方法可以获取存储在 EVP_CIPHER_ctx 结构中的更新后的 IV 缓冲区(增量 IV)吗?

最佳答案

仅当您将固定数量的 block (AES 的 block 大小为 16)写入密码时,单独的 IV 就足够了。因此,无论如何您都需要跟踪写入的数据量。

要检索计数器值,如果您自己计算的话会更容易。然后您可以重新启动特定 IV 的密码流。请注意,您可能仍然需要跳过一定量的明文或密文,例如通过加密零值字节,然后才能继续操作。

因此,要计算计数器值,只需将 IV 与已处理的完整 block 数相加即可:len(pt)/n 其中 len 是以字节为单位的长度和使用整数除法的n = 16。 IV 由随机数和作为固定大小的大端数的初始计数器值组成。因此,您只需将 IV 的每个字节与整数的每个字节相加,从右向左获取可能的进位(最低有效字节的高索引,最高有效字节的低索引)。

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

关于encryption - OpenSSL EVP_CIPHER_CTX 获取更新 IV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45548110/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com