Advertisement
Tvor0zhok

Untitled

Sep 19th, 2023 (edited)
714
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.34 KB | None | 0 0
  1. https://disk.yandex.ru/d/2vLWa_d536j7tg
  2. https://drive.google.com/drive/folders/1ZZ73ezM--6dDemRod1Jx7vU2od2ebC0d?usp=sharing
  3.  
  4. # main1.py #######################################################
  5.  
  6. import argparse
  7. import sys
  8.  
  9. # name of the program
  10. parser = argparse.ArgumentParser(prog='main1', description='Встраивание сообщения в контейнер')
  11.  
  12. # list of arguments
  13. parser.add_argument('-m', '--message', type=str, default='stdin', help='Путь к файлу с сообщением')
  14. parser.add_argument('-s', '--stego', type=str, default='stdout', help='Путь к файлу-стегоконтейнеру')
  15. parser.add_argument('-c', '--container', type=str, required=True, help='Путь к файлу-контейнеру')
  16.  
  17. # parsing of the arguments
  18. args = parser.parse_args()
  19.  
  20. # read data from files
  21.  
  22. if args.message == 'stdin':
  23. message_bytes = bytearray(sys.stdin.buffer.read()[:-1])
  24. else:
  25. with open(args.message, 'rb') as message:
  26. message_bytes = bytearray(message.read())
  27.  
  28. #print(message_bytes)
  29.  
  30. with open(args.container, 'r') as container:
  31. container_text = [x.rstrip() for x in container.readlines()]
  32.  
  33. pos = 0
  34.  
  35. # encoding data to the container (result in stegocontainer)
  36. stegocontainer_text = []
  37.  
  38. for x in message_bytes:
  39. for b in [2 ** i for i in range(8)]:
  40. stegocontainer_text.append((container_text[pos] if pos < len(container_text) else '') + (' ' if x & b != 0 else '') + '\n')
  41. pos += 1
  42.  
  43. if args.stego == 'stdout':
  44. for x in stegocontainer_text:
  45. print(x, end='')
  46. else:
  47. with open(args.stego, 'w') as stegocontainer:
  48. for x in stegocontainer_text:
  49. stegocontainer.write(x)
  50.  
  51. # -m message.txt -s stegocontainer.txt -c container.txt
  52.  
  53. # main2.py #######################################################
  54.  
  55. import argparse
  56. import sys
  57.  
  58. # name of the program
  59. parser = argparse.ArgumentParser(prog='main2', description='Восстановление сообщение из стегоконтейнера')
  60.  
  61. # list of arguments
  62. parser.add_argument('-m', '--message', type=str, default='stdout', help='Путь к файлу с сообщением')
  63. parser.add_argument('-s', '--stego', type=str, default='stdin', help='Путь к файлу-стегоконтейнеру')
  64.  
  65. # parsing of the arguments
  66. args = parser.parse_args()
  67.  
  68. # read data from file
  69.  
  70. if args.stego == 'stdin':
  71. stegocontainer_text = sys.stdin.read().split('\n')[:-1]
  72. else:
  73. with open(args.stego, 'r') as stegocontainer:
  74. stegocontainer_text = [x.rstrip('\n') for x in stegocontainer.readlines()]
  75.  
  76. if len(stegocontainer_text) % 8 != 0:
  77. raise Exception('Ошибка: стегоконтейнер должен содержать число строк, кратное восьми')
  78.  
  79. message_text = []
  80.  
  81. # decoding data to the message (result in message)
  82. for i in range(len(stegocontainer_text) // 8):
  83. byte = 0
  84.  
  85. for j in range(8):
  86. byte += (0 if len(stegocontainer_text[8 * i + j]) == 0 or stegocontainer_text[8 * i + j][-1] != ' ' else 1) * 2 ** j
  87.  
  88. message_text.append(byte)
  89.  
  90. #print(message_text)
  91. message_text = bytearray(message_text)
  92.  
  93. if args.message == 'stdout':
  94. print(message_text)
  95. else:
  96. with open(args.message, 'wb') as message:
  97. message.write(message_text)
  98.  
  99. # -m message.txt -s stegocontainer.txt
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement