4

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

1 に答える 1

6

ECBモードのAESは、複数のブロックをフィードできることを除いて、単一ブロック暗号化と同じです。

使用可能なCBCモードの暗号化のみがある場合は、すべてゼロの値のバイトを含む(ブロックサイズの)IVを使用してCBC暗号化の最初のブロックを使用できます。同じことがカウンター(CTR)モードの暗号化と、すべてゼロの値のバイトを含むナンスにも当てはまります(カウンターは最初のブロック暗号化の後でのみ増加します)。

Crypto++は高レベルのCryptoAPIのように思われるため、AES実装を直接呼び出さない方がよいでしょう。

于 2012-12-29T17:30:27.367 に答える