encrypt-decrypt single block with AES and Crypto++

2020-04-07 19:15发布

问题:

I need to encrypt single block of AES. I cant use any modes like CBC and other. Every example what i have seen use streaming modes.

EDIT: ok, i did it in the next manner, but i really dislike this try.

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(...) {}
}

回答1:

AES in ECB mode is identical to single block encryption, except that you can feed it multiple blocks.

If you've got only CBC mode encryption available you can use the first block of a CBC encrypt using a (block sized) IV containing bytes all valued zero. The same goes for counter (CTR) mode encryption and a nonce containing bytes all valued zero (the counter only increases after the first block encrypt).

Crypto++ seems to be a higher level Crypto API, so it is better not to directly call the AES implementation directly.