2011-12-20 2 views
-1

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

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 для шифрования, где, как я буду использовать пиксели изображения для encypt и выход будет шестнадцатеричные значения. Теперь проблема заключается в том, как преобразовать выходные шестнадцатеричные значения в допустимые форматы изображений, такие как .jpg или .tiff, чтобы показать это как изображение, украшенное Blowfish.

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

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

+0

ли вы зашифровать пиксели даных, либо содержимое файла изображения в? если последнее, оно не может быть сохранено назад и прочитано как нормальное изображение, так как шифрование будет взорвано. – CharlesB

+0

@charlesB Можете ли вы предложить мне, как я могу шифровать содержимое файла с помощью алгоритма. Нет такого алгоритма, который работает с файловыми данными, но весь алгоритм использует числа для кодирования. Если у вас есть какие-либо идеи, дайте мне знать – anupsahu

+0

Вы не ответили на вопрос. Данные пикселов и данные файла - это разные вещи, какие данные вы хотите кодировать? – CharlesB

ответ

0

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

Все, что вам нужно сделать, это петля над пикселями на вашем изображении, скопируйте значение длинного целого (возможно, 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; 
    } 
} 

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

+0

Я использую Matlab для вычисления энтропии и корреляции encypted изображения. Поэтому, если я запишу весь образ, я не смогу прочитать изображение в программном обеспечении Matlab. Поэтому мне нужно зашифровать блок данных. Таким образом, проблема заключается в том, что вывод шифрования - это шестнадцатеричное число, которое не является допустимой датой изображения. Поэтому мне нужна помощь в том, чтобы зашифровать или расшифровать изображение, а вывод должен быть распознан любым инструментом обработки изображений – anupsahu

+0

@anupsahu - вывод не является шестнадцатеричным номером, это именно то, как printf показывает его для чтения. Это целое число - всего лишь блок из 32, 0 и 1 с в памяти - это пиксели или что-то еще –

Смежные вопросы