【发布时间】:2021-12-30 19:47:21
【问题描述】:
对于我的学习项目,我需要修改 png 文件中的一些字节。
用于隐写术项目,我必须稍微修改一个字节并在照片中隐藏一条消息。
在下面的代码中,当我运行它时,它会将每个字节都变为 0 并且文件粉碎。在 bmp 文件中它可以工作,但我不知道如何在 png 格式中做到这一点。
很遗憾,我无法使用任何第三方库。我只需要一种正确读取每个字节的方法的帮助,然后使用 C++ 对其进行修改。感谢您的帮助。
string path = "C:\\Users\\sth....";
fstream file(path, ios::binary | ios::in | ios::out);
char buffer[1000];
file.seekp(300);
file << char(0);
file.read(buffer, 1000);
for(char c : buffer)
cout << int(c) << " ";
【问题讨论】:
-
它用于隐写术项目,我必须稍微修改一个字节并在照片中隐藏一条消息,因为您很可能需要使用png 库。
-
更改 png 文件中的随机字节将损坏整个 png 图像(正如您已经发现的那样,这是一种艰难的方式)。安全修改图像的唯一方法是 1) 将 png 转换为“原始像素”数组,2) 对原始像素执行修改,最后 3) 将像素转换回 png。完成步骤 1) 和 3) 的最简单方法是使用 .png 库。
-
STB 有用于简单读取和写入 PNG(以及其他图像格式)的例程:github.com/nothings/stb LodePNG 是另一个:lodev.org/lodepng
-
除了 png 问题:
fstream只有一个文件位置,用于任一读取或写入。所以每次你从阅读变成写作,反之亦然,你都必须寻找到正确的位置。 -
写入完成后关闭文件?
标签: c++ png steganography