Как я могу зашифровать файлы JPEG в C с помощью маски? - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу зашифровать файл JPEG. SIZE предопределено, потому что файл, который я обрабатываю, имеет именно такой размер. Это просто для изучения обработки файлов и побитовых операторов, мне все равно, если результат просто мусор, поэтому маска не имеет значения. Я действительно новичок в gdb и valgrind, поэтому я не мог понять, что они говорят, ожидайте SIGSEGV. Вот код:

#include <stdio.h>
#include <stdlib.h>

#define SIZE 7822

typedef unsigned char BYTE;

int main (void) {

    FILE *fp;

    if((fp = fopen("image.jpg" , "rb+")) == NULL){
        fprintf(stderr , "Something gone wrong");
        exit(EXIT_FAILURE);
    }


    BYTE mask = 0x12;
    BYTE * newvalue = malloc(7822); 

    while (fread( newvalue , 1 , SIZE , fp) != SIZE){
       *newvalue = *newvalue  >> 1;
       *newvalue = *newvalue & mask;
       fwrite(newvalue , 1 , SIZE , fp);
    }

    free(newvalue);
    fclose(fp);
    return 0;
} 

Я понял что-то странное. Это не так много, но я хотел бы поделиться. Всякий раз, когда я запускаю этот код, он увеличивает размер изображения на 3/4 от текущего размера.

...