2012-06-18 45 views
3

我需要加密单个AES块。我不能使用任何模式,如CBC和其他。每个例子我见过使用流模式。用AES和Crypto ++加密 - 解密单个块

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

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

你想[ECB模式](http://www.cryptopp.com/docs/ref/struct_e_c_b___mode.html)。 –

+0

@GregS,no))我想自己做模式,我需要用AES原语编码一个模块。 – Yola

+1

这就是ECB模式的意义!它只是使用AES原语对一个块进行加密。 –

回答

4

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

如果您只有CBC模式加密可用,您可以使用包含字节全部为零的(块大小)IV的第一个CBC加密块。对于计数器(CTR)模式加密也是一样的,并且包含所有值为零的字节的随机数(计数器仅在第一个块加密后才增加)。

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

+2

这个答案可以接受你,Yola,如果没有请指出缺少的东西。如果可能,请接受答案,否则他们将保持开放状态,并在未答复的问题堆栈上。 –