gpt4 book ai didi

c - Blowfish 图像算法

转载 作者:行者123 更新时间:2023-11-30 19:50:05 24 4
gpt4 key购买 nike

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

或者建议我任何其他方式,如果我可以加密整个图像而不加密每个像素?

需要对此的建议。提前致谢

最佳答案

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

您所要做的就是循环图像中的像素,将长整数的值(可能是 32 位,但取决于您的平台)复制到加密函数中,然后将加密的结果长整数值复制到其他值中图片。

您必须做出的唯一决定是 - 您想要加密整个图像文件 - 包括 header ,还是仅加密图像数据 block ?

如果您加密整个文件,您可以使用任何其他 Blowfish 实用程序来加密/解密它 - 但没有人会知道这是一个图像。如果您仅加密图像 block ,其他人将知道它是图像并能够打开它 - 但看到随机图片 - 但他们只能使用您的软件对其进行加密/解密。

// 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;
}
}

这不是一个优化的解决方案,你必须小心填充 - 但向你展示了总体思路

关于c - Blowfish 图像算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8577330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com