2016-05-10 14 views
2

JAVAAES/ECB/PKCS5Paddingの暗号化を行いました。今私はC/C++の同等のメソッドを探しています。パディングを使用している場合、常には、入力がブロックサイズの倍数である場合でも、追加する必要がありますC/C++でのPKCS#5のAES暗号化の埋め込み

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

:私は、次のコードを使用してCで暗号化するために管理しました。

正しくない、これは一般的な間違いです:

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

正しい:

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

PKCS#7 paddingを参照してください。