示例#1
1
 def hide(self, bin_data, order_num=0, bad_bits_num=1):
     bin_data = pack(">L", len(bin_data)) + bin_data
     if len(bin_data) > self.container_space(bad_bits_num):
         raise ContainerException("Too much data to hide. {}: but max={}".format(
             len(bin_data), self.container_space())
         )
     order_inspector = ORDER_INSPECTORS[order_num](self.container_space())
     sample_id = 0
     pos = 0
     hidden_data_byte = 0
     bits_data = byte_tools.to_bits(bin_data)
     for i in range(len(bits_data)):
         hidden_data_byte = hidden_data_byte * 2 + bits_data[i]
         pos += 1
         if (pos == bad_bits_num) or (i + 1 == len(bits_data)):
             if i + 1 == len(bits_data) and not (pos == bad_bits_num):
                 while pos != bad_bits_num:
                     hidden_data_byte *= 2
                     pos += 1
             self[sample_id] = byte_tools.hide_data(self[sample_id], hidden_data_byte, bad_bits_num)
             pos = 0
             hidden_data_byte = 0
             sample_id = order_inspector.next()
示例#2
0
 def test_to_bits(self):
     b = b'\xff\x01'
     res = 0
     for bit in byte_tools.to_bits(b):
         res = res * 10 + bit
     self.assertEqual(1111111100000001, res)
示例#3
0
 def test_to_bytes(self):
     first = b'\xff\x01'
     b = bytes(byte_tools.to_bytes(byte_tools.to_bits(first)))
     self.assertEqual(first, b)