2016-05-10 455 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