Advertisement
Guest User

Untitled

a guest
Oct 29th, 2012
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.24 KB | None | 0 0
  1. #!/usr/bin/env python
  2. #coding: utf-8
  3.  
  4. from array import array
  5. from sys import argv
  6.  
  7. def pad(string, length, pad_with):
  8.     while len(string) < length:
  9.         string = pad_with + string
  10.     return string
  11.  
  12. def message_to_bits(message):
  13.     bits = []
  14.     for byte in message:
  15.         bits.append(pad(bin(ord(byte))[2:], 8, "0"))
  16.     return ''.join(bits)
  17.  
  18. def insert_lsb_message(data, message):
  19.     data = array('c', data) # Convertimo-lo dato nun array para poder mutalo directamente
  20.  
  21.     offset = 54 # Ignoramos os primeiros 54 bytes, corresponden a cabeceira
  22.     bits = message_to_bits(message)
  23.     for bit in bits:
  24.         # Convertímo-la cadea a unha representación como enteiro para poder facer isto...
  25.         bit = int(bit)
  26.  
  27.         # Cambiamo-lo último bit polo valor escollido
  28.         tmp = (ord(data[offset]) & 0xFE) | bit
  29.         data[offset] = chr(tmp)
  30.  
  31.         # Na próxima iremos a polo seguinte byte
  32.         offset += 1
  33.  
  34.     return data
  35.  
  36.  
  37. if __name__ == '__main__':
  38.     if len(argv) != 4:
  39.         print "%s <input> <output> <message>" % argv[0]
  40.         exit(0)
  41.  
  42.     fin = open(argv[1], "rb")
  43.     fout = open(argv[2], "wb")
  44.     message = argv[3]
  45.  
  46.     fout.write(insert_lsb_message(fin.read(), message))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement