使用 AES 和 Crypto++ 加密-解密单个块

Yol*_*ola 4 c++ cryptography crypto++ block-cipher

我需要加密单个 AES 块。我不能使用任何模式,如 CBC 和其他。我所看到的每个示例都使用流模式。

编辑:好的,我用下一种方式做了,但我真的不喜欢这种尝试。

void dec(const byte *key, const byte* xblock, const byte *cipher, byte *plain) {
    AESDecryption d;

    try {
        const NameValuePairs &nvp = MakeParameters("", 0);
        d.UncheckedSetKey(key, 16, nvp);
        d.ProcessAndXorBlock(cipher, xblock, plain);
    }
    catch(...) {}
}
Run Code Online (Sandbox Code Playgroud)

Maa*_*wes 6

ECB 模式下的 AES 与单块加密相同,不同之处在于您可以为其提供多个块。

如果您只有 CBC 模式加密可用,您可以使用 CBC 加密的第一个块使用(块大小)IV,其中包含所有值为零的字节。计数器 (CTR) 模式加密和包含所有值为零的字节的随机数也是如此(计数器仅在第一个块加密后增加)。

Crypto++ 似乎是更高级别的 Crypto API,所以最好不要直接调用 AES 实现。

  • 你可以接受这个答案,Yola,如果不是,请指出缺少什么。如果可能,请接受答案,否则它们将处于开放状态并位于未回答的问题堆栈中。 (2认同)