Во-первых, я не очень знаком с C, я из Java, C #, C ++ ... и, возможно, я унаследовал дефекты от этих языков, чтобы реализовать эту практику, у меня есть следующий вопрос, вот мойcode:
#include <stdio.h>
#include <stdlib.h>
void decrypt(unsigned long* v, unsigned long* k);
const int MAX = 32;
const long delta = 0x9e3779b9;
long sum=0xC6EF3720;
int main() {
FILE *fp;
FILE *destino;
unsigned long v[2];
unsigned long k[4] = { 128, 129, 130, 131 };
unsigned long tam=0;
char* buffer;
char* aux[sizeof(unsigned long)];
int i;
if ((fp = fopen("image.png", "rb")) == NULL) {
printf ("Error! \n ");
return 0;
}
else {
fread(&aux,sizeof(unsigned long),1,fp);
memcpy(&tam,&aux,sizeof(unsigned long));
buffer = (char*)malloc(tam);
//fread(&buffer,1,tam,fp);
char *buffer2[28568];
fread(&buffer2,1,28568,fp);
/*for(i = 0;i < tam;++i) {
printf("%c", ((char *)buffer2)[i]);
}*/
for(i=4;i<tam;i+=8) {
memcpy(&v,&buffer2[i],8);
decrypt(&v,&k);
}
if ((result= fopen("image2.png", "rb")) == NULL) {
printf ("Error! \n ");
return 0;
}
else {
fwrite(v,sizeof(unsigned long)*2,1,result);
fclose (result);
fclose(fp);
}
}
return 0;
}
void decrypt(unsigned long* v, unsigned long* k) {
int i=0;
while(i<MAX) {
v[1] = v[1] -((4 << v[0])+(k[2]^v[0])+(sum^(5 >> v[0]))+k[3]);
v[0] = v[0] -((4 << v[1])+(k[0]^v[1])+(sum^(5 >> v[1]))+k[1]);
sum = sum-delta;
i++;
}
}
Где tam - это размер моего двоичного файла (в данном случае это изображение), где я храню первые 4 байта (без знака), где находится размер в моем png-файле (28568)
Когда я создаю свой буфер char *, мне нужно динамически назначать с помощью malloc, но когда я создаю новый фред из моего файла, я получаю «Нет доступного источника для» msvrct! Memcpy () в 0xrandom_memory_address »из Eclipse, когда я отлаживаюНу, я комментирую эту строку и пытаюсь сделать так, чтобы вручную установить новый буфер2 с размером 28568 в качестве размера моего массива, по-видимому, работает, делая итерацию buffer2, печатает значения символов ascii, но когда я вызываю команду decrypt for, сделайте расшифровку моего изображения, окончательный результат хранится в массиве v, который я должен скопировать в новый файл, я пытался найти, как сделать пустое изображение PNG в C, но яничего не нашел, поэтому я создал копию своего зашифрованного изображения, назвав его «image2.png», но я полагаю, что это не «чистое решение» для этого, потому что с другой стороны не работает вообще.
Для более подробного объяснения этого упражнения просто скажите, что функция дешифрования работает с блоками по 8 байт (64 бита), которые через ключ (массив k) выполняют последовательность операций, где они хранятся в самом массиве v, пересекая цикл 8.в 8 и извлекает значение буфера в v в каждом из них, после выполнения цикла у нас есть результат в v и остается только скопировать в новый файл, где, наконец, отображается дешифрование изображения.
Это оченьсложная практика для всех новичков в Си, это сводит меня с ума, пытаясь понять, что я делаю не так.
Надеюсь, кто-нибудь может увидеть то, что я пока не могу.