Blowfish Algo For a Image

Blowfish Algo For a Image

问题描述:

我正在做一个图像加密项目。我们在图像上使用河豚加密。根据Paul Kocher的代码http://www.schneier.com/blowfish-download.html。主要功能是如下Blowfish Algo For a Image

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加密图像。

或者,如果我可以在不加密每个像素的情况下对整个图像进行加密,那么还是建议我使用其他方法?

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

+0

你加密图像的像素,或者图像的文件内容的总体思路?如果是后者,则无法将其保存并读取为正常图像,因为加密将会使格式变为灰色。 – CharlesB 2011-12-20 15:02:46

+0

@charlesB你可以建议我如何使用算法加密文件内容。没有这样的算法可用于文件数据,但所有算法都使用数字来进行加密。如果你有任何想法,请告诉我 – anupsahu 2011-12-20 15:13:07

+0

你没有回答这个问题。像素数据和文件数据是不同的东西,你想要编码什么数据? – CharlesB 2011-12-20 15:32:13

该库只是将一个长整数加密成另一个长整数 - 这个数字来自哪里并不重要。

你所要做的就是遍历图像中的像素,将长整数的值(可能是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来计算加密图像的熵和相关性。所以如果我使用整个图像,我将无法在matlab软件中读取图像。所以我需要的是加密数据块。所以问题是加密的输出是一个十六进制数字,它不是一个有效的图像日期。所以我需要帮助谁加密或解密图像,并且输出应该被任何图像处理工具识别 – anupsahu 2011-12-20 17:45:18

+0

@anupsahu - 输出不是十六进制数,这就是printf显示它为您阅读的内容。它是一个整数 - 只是内存中的32,0和1个块 - 可以是像素或其他任何东西 – 2011-12-20 18:00:42