C/C++ 中用于 AES 加密的 PKCS#5 填充
PKCS#5 padding for AES encryption in C/C++
我在 JAVA
中进行了 AES/ECB/PKCS5Padding
加密。现在我正在 C/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;
}
使用填充时,必须始终 添加,即使输入是块大小的倍数。
不正确,这是一个常见的错误:
if(iLen % 16 == 0){
len = iLen;
}
正确:
int blockSize = 16;
int len = iLen + blockSize - (iLen % blockSize);
我在 JAVA
中进行了 AES/ECB/PKCS5Padding
加密。现在我正在 C/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;
}
使用填充时,必须始终 添加,即使输入是块大小的倍数。
不正确,这是一个常见的错误:
if(iLen % 16 == 0){
len = iLen;
}
正确:
int blockSize = 16;
int len = iLen + blockSize - (iLen % blockSize);