
LSB顺序隐写被用Java实现。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
没有积分的私聊,我保证将您收到的所有消息百分之百地发送给您。
1、算法的核心在于:首先,读取图片A,并从中提取其RGB三个通道的数据,随后将这些数据转换成三个矩阵,分别标记为a1、a2和a3。其次,读取文件B,将其转换为比特流b。最后,对比特流b进行逐位遍历,得到比特 b1、b2、b3、b4、b5、b6等一系列数据,并将这些数据依次替换为矩阵a1第一个元素的最低位、a2第一个元素的最低位、a3第一个元素的最低位,以此类推;同样地,将b4替换为a1第二个元素对应的最低位。
2、具体实现如下:
1、隐写技术应用:利用Java的ImageIO库读取图片,从而获取其RGB通道的信息。
2、文件嵌入处理:借助Java NIO库读取被嵌入的文件,并将其转换为字节数组。需要强调的是,原生方法得到的字节数组是字节类型的数据结构;然而为了满足算法的精细化要求,还需要对得到的字节数组进行进一步的转换和封装处理,最终将其转化为形如“10101”的二进制数组。例如,如果读取到的文件字节数组的第一个元素值为63(十进制),则需要将其转换为“00111111”的二进制数组。同时需妥善保存文件的总长度信息。
3、按照预定算法流程遍历二进制数组:当遍历到的数值为0时,将矩阵对应的元素与十六进制值0xfe进行按位与运算操作(与运算),从而将该元素的最低位设置为0;当遍历到的数值为1时, 将矩阵对应的元素与十六进制值0x01进行按位或运算操作(或运算),从而将该元素的最低位设置为1.
4、生成含隐写信息的图像:完成上述步骤3的操作后, 将经过隐写处理后的矩阵写成一张全新的图片。
3、读取操作的具体步骤如下:
1、使用Java ImageIO库读取图片并获取其RGB通道信息。
2、利用隐写技术步骤3中得到的文件长度信息, 遍历图片的像素矩阵。值得注意的是, 为了后续步骤能够顺利进行, 需要对得到的“100100......”序列进行封装处理, 将每八位二进制序列封装为一个数组;最终会得到一系列包含八位二进制序列的数组集合.
3、对步骤2中获得的数组集合进行转换处理: 例如,“00111111”应该转换为一个表示数值63的字节类型数据, “ “ 应该转换为-63 (十六进制)。这一步将会得到一个字节类型的数据数组.
4 、将步骤3中得到的字节类型数据数组写入文件. 需要特别指出的是, 写入的文件格式应与隐写模块步骤二中读入的文件格式保持一致.
5 、程序运行环境要求:
1.安装Java8开发环境。
2.进入包含可执行jar文件的目录, 使用命令行执行命令 `java -jar 2016115130.jar` 。
3.按照提示输入嵌入和被嵌入的文件名, 并注意路径问题的设置。
全部评论 (0)


