前话
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