Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- https://disk.yandex.ru/d/2vLWa_d536j7tg
- https://drive.google.com/drive/folders/1ZZ73ezM--6dDemRod1Jx7vU2od2ebC0d?usp=sharing
- # main1.py #######################################################
- import argparse
- import sys
- # name of the program
- parser = argparse.ArgumentParser(prog='main1', description='Встраивание сообщения в контейнер')
- # list of arguments
- parser.add_argument('-m', '--message', type=str, default='stdin', help='Путь к файлу с сообщением')
- parser.add_argument('-s', '--stego', type=str, default='stdout', help='Путь к файлу-стегоконтейнеру')
- parser.add_argument('-c', '--container', type=str, required=True, help='Путь к файлу-контейнеру')
- # parsing of the arguments
- args = parser.parse_args()
- # read data from files
- if args.message == 'stdin':
- message_bytes = bytearray(sys.stdin.buffer.read()[:-1])
- else:
- with open(args.message, 'rb') as message:
- message_bytes = bytearray(message.read())
- #print(message_bytes)
- with open(args.container, 'r') as container:
- container_text = [x.rstrip() for x in container.readlines()]
- pos = 0
- # encoding data to the container (result in stegocontainer)
- stegocontainer_text = []
- for x in message_bytes:
- for b in [2 ** i for i in range(8)]:
- stegocontainer_text.append((container_text[pos] if pos < len(container_text) else '') + (' ' if x & b != 0 else '') + '\n')
- pos += 1
- if args.stego == 'stdout':
- for x in stegocontainer_text:
- print(x, end='')
- else:
- with open(args.stego, 'w') as stegocontainer:
- for x in stegocontainer_text:
- stegocontainer.write(x)
- # -m message.txt -s stegocontainer.txt -c container.txt
- # main2.py #######################################################
- import argparse
- import sys
- # name of the program
- parser = argparse.ArgumentParser(prog='main2', description='Восстановление сообщение из стегоконтейнера')
- # list of arguments
- parser.add_argument('-m', '--message', type=str, default='stdout', help='Путь к файлу с сообщением')
- parser.add_argument('-s', '--stego', type=str, default='stdin', help='Путь к файлу-стегоконтейнеру')
- # parsing of the arguments
- args = parser.parse_args()
- # read data from file
- if args.stego == 'stdin':
- stegocontainer_text = sys.stdin.read().split('\n')[:-1]
- else:
- with open(args.stego, 'r') as stegocontainer:
- stegocontainer_text = [x.rstrip('\n') for x in stegocontainer.readlines()]
- if len(stegocontainer_text) % 8 != 0:
- raise Exception('Ошибка: стегоконтейнер должен содержать число строк, кратное восьми')
- message_text = []
- # decoding data to the message (result in message)
- for i in range(len(stegocontainer_text) // 8):
- byte = 0
- for j in range(8):
- byte += (0 if len(stegocontainer_text[8 * i + j]) == 0 or stegocontainer_text[8 * i + j][-1] != ' ' else 1) * 2 ** j
- message_text.append(byte)
- #print(message_text)
- message_text = bytearray(message_text)
- if args.message == 'stdout':
- print(message_text)
- else:
- with open(args.message, 'wb') as message:
- message.write(message_text)
- # -m message.txt -s stegocontainer.txt
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement