RGB图像上的密文--违规数据隐藏

本文介绍了如何在RGB图像上进行数据隐藏,通过微调像素值来隐藏秘密信息,而不影响图片显示。作者展示了从字符到二进制,再到在像素上存储数据的过程,并给出了在不增加像素点的情况下,如何利用奇偶性和mod 4的方法来存储更多数据。通过示例和实际的4k图片,展示即使大量隐藏数据,也难以察觉到图像差异。然而,这种方法的局限性在于隐藏后的图片只能以未压缩的bmp格式保存,压缩会破坏隐藏数据。作者还提供了Demo程序供读者尝试。
摘要由CSDN通过智能技术生成

前话

Git的操作告一段落, 想了想Azure就是一个云服务, 没必要单独给MS作宣传, 况且我们公司也是用的Bitbucket。

这一篇文章要讲一个和数据结构相关的东西: 在RGB图像上进行数据隐藏.

过去我知道的一种隐藏方式是把真实数据放在文件的结尾后面, 比如:

这种图片是可以正常打开的, 因为头部一般保存了数据长度, 我们写的内容在正常数据以外, 不会影响图片原始数据的读取. 印象中这是当年的一种保存18🈲小电影的方式.

我下面要介绍的是另一种方式, 在不更改图片的文件信息的前提下, 通过细微的调整图片的像素值来实现隐藏秘密数据的目的.

准备

不管是什么数据, 在电脑系统上都是以二进制的形式来保存. 所以这里先通过字符串了解下数据在计算机上的保存格式.

字符串是我们日常最常用的数据形式,先看下一个字符串的数据是怎么保存的。

比如这个字符串:"I'm something,but nothing."

Char Print of String:I'm something,but nothing.
I ' m   s o m e t h i n g , b u t   n o t h i n g .

Byte Print of String:I'm something,but nothing.
0x49 0x27 0x6D 0x20 0x73 0x6F 0x6D 0x65 0x74 0x68 0x69 0x6E 0x67 0x2C 0x62 0x75 0x74 0x20 0x6E 0x6F 0x74 0x68 0x69 0x6E 0x67 0x2E

Bits Print of String:I'm something,but nothing.
01001001 00100111 01101101 00100000 01110011 01101111 01101101 01100101 01110100 01101000 01101001 01101110 01100111 00101100 01100010 01110101 01110100 00100000 01101110 01101111 01110100 01101000 01101001 01101110 01100111 00101110

第一个是按照每个字符来打印,字符串就是一个字符数组,以‘\0’表示结束。上面这个字符串的长度是26,表示有26个连续的char分别表示每个字符,在第27的位置上是一个'\0'表示字符串的结尾。

第二个是按照字节来打印,也就是以uint

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值