河豚算法为图像

时间:2011-12-20 14:58:28

标签: c encryption blowfish

我正在做一个关于图像加密的项目。我们在图像上使用河豚加密。根据Paul Kocher的守则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来加密,因为我将使用Image Pixels来加密,输出将是十六进制值。现在的问题是如何将输出的十六进制值转换为有效的图像格式,如.jpg或.tiff,以便将其显示为Blowfish加密图像。

如果我可以在不加重每个像素的情况下对整个图像进行加密,那么建议我使用其他任何方式?

需要对此提出建议。感谢提前

1 个答案:

答案 0 :(得分: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;
   }
}

不是一个优化的解决方案,你必须要小心填充 - 但是向你展示了一般的想法