Ang*_*tis 3 c steganography significant-digits bit
我在C中用bmp图像编写了一个简单的隐写术工具.
我将图像读取到内存中,并将文本隐藏在char字节[8]中,一次一个字符.
所以,例如.
a=0d97
bytes[0] = 0
bytes[1] = 1
bytes[2] = 1
bytes[3] = 0
bytes[4] = 0
bytes[5] = 0
bytes[6] = 0
bytes[7] = 1
Run Code Online (Sandbox Code Playgroud)
然后我将转到第一个图像字节(char *ptr points它每次)将字节[0]放到LSB,然后是下一个等.
如果*ptr=0xff or 0b11111111我必须将最后的1设置为0.这可以与
*ptr = *ptr ^ 0x01 ;
Run Code Online (Sandbox Code Playgroud)
但如果*ptr = 0x00或者0b00000000xor doesent工作,因为0^1=1
我很困惑如何设置案例.我需要一个运算符在每次0时最后一位,而在LSB为1或0的情况下不触及其他位.
使用此模式将最低有效位设置为位(0或1)中的值:
new_value = old_value & 0xFE | bit
Run Code Online (Sandbox Code Playgroud)
AND将关闭位0,如果位为1,OR将重新打开.
1和x的AND是x,而0和x的AND是0.因此,除了最低有效位之外,它与所有位设置为1的数字对应:
*ptr = *ptr & 0xfe;
Run Code Online (Sandbox Code Playgroud)
要将该位设置为1,请注意0和x的OR是x,而1和x的OR是1:
*ptr = *ptr | 0x01;
Run Code Online (Sandbox Code Playgroud)