【发布时间】:2013-01-03 19:58:27
【问题描述】:
我正在编写一个图像加密程序,其中我在图像中编码一个字符串。
我正在使用.png 图像。
编码按以下步骤进行:
- 图像的像素使用 getRGB() 存储在二维数组中。
- 字符串中的每个字符都转换为二进制形式并存储在数组中。
-
4byte像素的每个字节的 LSB 根据字符的二进制形式的每一位而改变。第一个字节的 LSB 在第 0 位,第二个字节的 LSB 在第 8 位,第三个字节在第 16 位,第四个字节在第 24 位。 - 编码后,使用setRGB()方法将修改后的像素写入原图。
解码:
- 使用getRGB()读取图像的像素;
- 采用反向编码方法检索数据。
-
在每 8 位之后,包含解码位的 int 被转换为字符。然后为另一个字符初始化为零。
if((pixels[i][j] & change)==1) { tempText|=1 ; } tempText<<=1;
其中变化为 1,256,65536,16777216,具体取决于迭代。第 0、8、16 和 24 位为 1。
代码编译良好。但解码后,我在输出中得到奇怪的 ascii 字符。我找不到原因。所以我在这里咨询专家。
【问题讨论】:
-
您是否将图像保存为 JPEG?
-
这仅适用于无损压缩格式(如 PNG)
-
@Umer Farooq:你所做的被称为“隐写术”。我相应地添加了标签。
-
@Umer Farooq:没问题...顺便说一句,在您的 ideone.com 粘贴中,您写了“Stegnography”。这真的是“隐写术”(你忘了一个'a'); )
-
如需尽快获得更好的帮助,请发帖SSCCE。
标签: java image encoding steganography