2016-05-10 501 views
2

我在JAVA中做了AES/ECB/PKCS5Padding加密。現在我正在尋找C/C++中的等效方法。我並管理使用以下代碼用C來加密:在C/C++中用於AES加密的PKCS#5填充

const unsigned char *key = (unsigned char *)"A2XTXFEQFOPZFAKXFOPZFAK5"; 
unsigned char input[] = {"Hello World"}; 
int iLen = strlen((char*)input); 
int len = 0; 
if(iLen % 16 == 0){ 
    len = iLen; 
} 
else{ 
    len = (iLen/16)*16 + 16; 
} 
unsigned char output[len]; //next 16bit 

AES_KEY enc_key; 
AES_set_encrypt_key(key, strlen((char*)key)*8, &enc_key); 
int position = 0; 
while(position < iLen){ 
    AES_ecb_encrypt(input+position,output+position,&enc_key,AES_ENCRYPT);  
    position += 16; 
} 

回答

2

當使用填充它必須總是添加,即使輸入是塊的大小的倍數。

不正確的,這是一個常見的錯誤:

if(iLen % 16 == 0){ 
    len = iLen; 
} 

正確:

int blockSize = 16; 
int len = iLen + blockSize - (iLen % blockSize); 

PKCS#7 padding