Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PKCS#5填充用于C/C+中的AES加密+;_Java_C++_Encryption_Openssl_Aes - Fatal编程技术网

Java PKCS#5填充用于C/C+中的AES加密+;

Java PKCS#5填充用于C/C+中的AES加密+;,java,c++,encryption,openssl,aes,Java,C++,Encryption,Openssl,Aes,我在JAVA中添加了AES/ECB/pkcs5p加密。现在我在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 =

我在
JAVA
中添加了
AES/ECB/pkcs5p加密。现在我在
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;
}
const unsigned char*key=(unsigned char*)“A2XTXFEQFOPZFAKXFOPZFAK5”;
无符号字符输入[]={“Hello World”};
int-iLen=strlen((char*)输入;
int len=0;
如果(iLen%16==0){
len=iLen;
}
否则{
len=(iLen/16)*16+16;
}
无符号字符输出[len]//下一个16位
AES_键和enc_键;
AES设置加密密钥(密钥、strlen((char*)密钥)*8和加密密钥);
int位置=0;
while(位置
使用填充时,必须始终添加填充,即使输入是块大小的倍数

不正确,这是一个常见错误:

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

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