如何在AES / CTR加密中获取特定计数器的密钥流块

时间:2015-06-23 11:49:25

标签: encryption aes crypto++

我正在使用Crypto ++库

我制作了IV和键并将它们传递给了函数

    CTR_Mode< AES >::Encryption e;
    e.SetKeyWithIV(key, 16, iv);

然后当我加密时,我在字符串本身上使用转换过滤器来获取加密字符串。

enter image description here

我想获得与字符串进行异或的最终密码密钥加密吗? 有没有办法从加密对象中获取它?

1 个答案:

答案 0 :(得分:0)

如果您只需要与明文的前16个字节进行异或的密钥流(如图所示),那么您需要使用相同的AES CTR模式加密设置为00的16个字节的块。密钥流的块,当与所有零进行异或时,只返回相同的流。因此,您可以为所需的许多明文块执行此操作。正如您已经猜到的那样,您需要使用相同的密钥和IV。

如果您只想在流中进一步解密某些内容,那么您需要计算一个新的16字节IV。你可以这样做,因为IV直接用作初始计数器(可能用零填充右边)。因此,您只需计算预处理的块数,然后将此值(作为大端值)添加到IV。这当然只适用于块边界,如果要跳转到非常特定的偏移量,可能需要从密钥流中丢弃一些字节。