Запись двоичных данных из зашифрованного файла в указанную область памяти - PullRequest
0 голосов
/ 02 октября 2011

Прежде всего код для криптографической функции aes:

void
xorcrypto(u_int8_t *key, u_int32_t keylen,
    u_int8_t *data, u_int32_t datalen)
{

/*u_int8_t ....etc are alias for uint8_t...etc so don't bother about them*/

FILE *fp,*fq,*fr;
int i;
fp=fopen("key","wb");
fwrite((char *)key,keylen,1,fp);
fq=fopen("file.txt","wb");
fwrite((char *)data,datalen,1,fq);

fclose(fq);
fclose(fp);

system("sudo openssl enc -aes-256-cbc -salt -in file.txt
-out file.enc -pass file:key");


/* Here is the code section i need*/

}

Что мне нужно в приведенном выше разделе кода, так это то, что он должен иметь возможность
заполнить / изменить данные (на которые указывает u_int8_t * data) содержимое файла file.enc

Не беспокойтесь о длине данных, фактически вход, который он получает, от n / w ip
пакет, поэтому он имеет данные до 1024 байтов, а содержимое файла никогда не собирается превышать этот предел.

Вот моя попытка сделать это (также для целей отладки мне нужно упомянуть содержимое файла file.enc, а также раздел данных в стандартный вывод)

fr=fopen("file.enc","rb");
memset(data,0,sizeof(data));

i=0;

while( (ch=fgetc(fr))==EOF) {
     data[i]=ch;
     i++;
}

data[i]='\0';
i=0;
puts((char *)data);
printf("\n");
fclose(fr);

Вот несколько выходных снимков, которые могут помочь .....

udit@udit-Dabba ~/Downloads/sendip-2.5-mec-2/mec $ cat key
thisisaeskey

udit@udit-Dabba ~/Downloads/sendip-2.5-mec-2/mec $ cat file.txt
w�uP����abcd

udit@udit-Dabba ~/Downloads/sendip-2.5-mec-2/mec $ cat file.enc
Salted__����a�dR�P��l�C-<��y�O^Z��/a��3����Q

udit@udit-Dabba ~/Downloads/sendip-2.5-mec-2/mec $ hexdump -C file.enc 
00000000  53 61 6c 74 65 64 5f 5f  b6 f2 b2 d0 61 d9 64 1c  |Salted__....a.d.|
00000010  52 e0 50 96 e8 6c 0e c0  43 2d 3c c4 f6 79 1b d2  |R.P..l..C-<..y..|
00000020  4f 5e 5a b1 d6 2f 61 f8  15 f6 33 e1 88 f0 db 51  |O^Z../a...3....Q|
00000030
udit@udit-Dabba ~/Downloads/sendip-2.5-mec-2/mec $ 

Функция не смогла изменить содержимое указанного местоположения (данные u_int8_t *) и поэтому не смогла записать данные на стандартный вывод puts(data).

Пожалуйста, помогите мне в этом ... если потребуется дополнительная информация об этом, я добавлю ее.

1 Ответ

1 голос
/ 02 октября 2011

Попробуйте изменить

while( (ch=fgetc(fr))==EOF)

в

while( (ch=fgetc(fr))!=EOF)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...