2

AFAIK,CFB8 模式的块大小为 1 字节。所以我可以推断IV也是1字节长度。但是,当我进行测试时,将仅 1 个字节的相同 iv 传递给用于加密和解密功能的通用加密创建函数时,加密和解密的消息不匹配。

所以我认为 API 应该占用超过 1 个字节来用作 IV。我想知道为什么?我的理解有什么问题吗?

CCCryptorStatus result = CCCryptorCreateWithMode(operation,
                                                 kCCModeCFB8,
                                                 kCCAlgorithmAES128,
                                                 ccNoPadding,
                                                 iv.bytes,
                                                 key.bytes,
                                                 key.length,
                                                 NULL,
                                                 0,
                                                 0,
                                                 0,
                                                 &_cryptor);

if (result == kCCSuccess)
    result = CCCryptorUpdate(_cryptor,
                             data.bytes,
                             data.length,
                             cipherData.mutableBytes,
                             cipherData.length,
                             &outLength);

if (result == kCCSuccess)
    result = CCCryptorFinal(_cryptor,
                            cipherData.mutableBytes,
                            cipherData.length,
                            &outLength);

if (result == kCCSuccess)
    result = CCCryptorRelease(_cryptor);
4

2 回答 2

4

IV 大小必须与对称算法块大小匹配。因此,对于 AES,您应该有一个 16 字节的 IV。

CFB-8 有一个字节的移位大小。它与密码的块大小无关。

于 2013-01-30T09:34:36.210 回答
3

它没有 1 个字节的块大小,它只是每 1 个字节重新同步。IV 实际上是 16 个字节(对于 AES)。

于 2013-01-30T09:34:32.560 回答