2012-06-18 136 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,如果沒有請指出缺少的東西。如果可能,請接受答案,否則他們將保持開放狀態,並在未答覆的問題堆棧上。 –