2016-05-10 6 views
2

Ich tat AES/ECB/PKCS5Padding Verschlüsselung in JAVA. Jetzt suche ich nach einer gleichwertigen Methode in C/C++. Ich habe es geschafft, in C mit dem folgenden Code zu verschlüsseln:PKCS # 5 Auffüllen für AES-Verschlüsselung in C/C++

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; 
} 

Antwort

2

Bei der Verwendung von padding es muss immer hinzugefügt werden, auch wenn der Eingang ist ein Vielfaches der Blockgröße.

Falsch, das ist ein häufiger Fehler:

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

Richtig:

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

Siehe PKCS#7 padding.