我需要加密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(...) {}
}
ECB 模式下的 AES 与单块加密相同,只是您可以为其提供多个块。
如果您只有 CBC 模式加密可用,则可以使用包含所有值为零的字节的(块大小)IV 使用 CBC 加密的第一个块。计数器 (CTR) 模式加密和包含所有值为零的字节的随机数也是如此(计数器仅在第一个块加密后增加)。
Crypto++似乎是一个更高级别的Crypto API,所以最好不要直接调用AES实现。