Sud*_*shi 1 c steganography bit-shift bitwise-operators
我最近一直在做一些项目,我一直想进入隐写术。我查了几种方法来做到这一点,但其中一种我不太明白。
(image[i][j].red & ~0x3) | ((file[f] & 0x60) >> 5);
(image[i][j].green & ~0x3) | ((file[f] & 0x18) >> 3);
(image[i][j].blue & ~0x7) | ((file[f] & 0x7));
Run Code Online (Sandbox Code Playgroud)
我得到了它的一部分,比如 & ~0x3 和 & ~0x7 分别将红色/绿色的最后 2 位和蓝色的最后 3 位归零,但真正让我感兴趣的是 file[f] & 0x60, 0x18 , 和 0x7。file是一个从二进制文件中读入的无符号字符数组,image是一个 rgb 矩阵,每个组件有 3 个无符号字符,分别代表红色、绿色和蓝色。顺便说一下,这一切都在 C 中。提前致谢
red6 位和第 5 位file[f]。green4 位和第 3 位file[f]。blue2、1 和 0 位替换 的最低有效 3 位file[f]。例如
+---+---+---+---+---+---+---+---+
file[f] | h | g | f | e | d | c | b | a |
+---+---+---+---+---+---+---+---+
+---+---+---+---+---+---+---+---+
& 0x60 | 0 | g | f | 0 | 0 | 0 | 0 | 0 |
+---+---+---+---+---+---+---+---+
+---+---+---+---+---+---+---+---+
>> 5 | 0 | 0 | 0 | 0 | 0 | 0 | g | f |
+---+---+---+---+---+---+---+---+
+---+---+---+---+---+---+---+---+
red | H | G | F | E | D | C | B | A |
+---+---+---+---+---+---+---+---+
+---+---+---+---+---+---+---+---+
& ~0x3 | H | G | F | E | D | C | 0 | 0 |
+---+---+---+---+---+---+---+---+
+---+---+---+---+---+---+---+---+
| | H | G | F | E | D | C | g | f |
+---+---+---+---+---+---+---+---+
Run Code Online (Sandbox Code Playgroud)
想象每种颜色都是 0 到 255 之间的三个值的组合。白色是 255,255,255;黑色为 0,0,0;亮红色为255,0,0;亮黄色为255,255,0;等等。
现在假设我们更改了替换这些数字的最低有效数字,以便我们最终使用 252,3,5 而不是 255,0,0。你会注意到不同吗?也许不吧。