Blowfish Algo For Image - PullRequest
       19

Blowfish Algo For Image

0 голосов
/ 20 декабря 2011

Я делаю проект по кодированию изображения. Мы используем шифрование blowfish на изображении. Согласно коду Пола Кохера http://www.schneier.com/blowfish-download.html. Основная функция выглядит следующим образом

void main(void) {
unsigned long L = 1, R = 2;
BLOWFISH_CTX ctx;

Blowfish_Init (&ctx, (unsigned char*)"TESTKEY", 7);
Blowfish_Encrypt(&ctx, &L, &R);
printf("%08lX %08lX\n", L, R);
if (L == 0xDF333FD2L && R == 0x30A71BB4L)
  printf("Test encryption OK.\n");
else
  printf("Test encryption failed.\n");
Blowfish_Decrypt(&ctx, &L, &R);
if (L == 1 && R == 2)
  printf("Test decryption OK.\n");
else
  printf("Test decryption failed.\n");
}

Здесь автор использует L = 1 и L = 2 для шифрования, где я буду использовать пиксели изображения для шифрования, и на выходе получим шестнадцатеричные значения. Теперь проблема заключается в том, как преобразовать выходные шестнадцатеричные значения в допустимые форматы изображений, такие как .jpg или .tiff, чтобы они отображались как изображение, зашифрованное Blowfish.

Или предложите мне другой способ, если я смогу зашифровать изображение целиком, не кодируя каждый пиксель?

Нужно предложение по этому вопросу. СПАСИБО заранее

1 Ответ

0 голосов
/ 20 декабря 2011

Библиотека просто зашифровывает одно длинное целое в другое длинное целое - не имеет значения, откуда это число.

Все, что вам нужно сделать, это зациклить пиксели на изображении, скопировать длинное целое числостоит (вероятно, 32 бита, но зависит от вашей платформы) в функцию шифрования, а затем скопируйте полученное длинное целое число зашифрованных в другое изображение.

Единственное решение, которое вам нужно сделать, - вы хотитезашифровать весь файл изображения - включая заголовок или только блок данных изображения?

Если вы зашифруете весь файл, вы можете использовать любую другую утилиту Blowfish для его шифрования / дешифрования, но никто не узнает, что это изображение.Если вы зашифруете только блок изображения, другие люди будут знать, что это изображение, и смогут открыть его - но увидят случайное изображение - но они смогут зашифровать / расшифровать его только с помощью вашего программного обеспечения.

// assuming Blowfish_Encrypt is context,input,output
unsigned char *data = image.get_pointer_to_data();
int step = sizeof(unsigned long);
for (int y=0;y<rows;y++) {
   for (int x=0;x<cols;x+=step) {
      memcpy(&L,data,step);      
      Blowfish_Encrypt(&ctx, &L, &R);
      memcpy(data,&R,step);      
      data += step;
   }
}

Не является оптимальным решением, и вы должны быть немного осторожны с заполнением - но показывает вам общую идею

...