#!/usr/bin/env python3
"""lsb_hide.py — прячет файл в младшие биты PNG (по 1 биту в R, G, B каждого пикселя).

Формат: [32 бита длины в байтах][данные], биты старшим вперёд, пиксели слева направо,
сверху вниз. Так же читает zsteg в режиме b1,rgb,lsb,xy.

    python3 lsb_hide.py cover.png secret.txt stego.png
"""
import sys
from PIL import Image

cover, secret, out = sys.argv[1:4]
im = Image.open(cover).convert("RGB")
data = open(secret, "rb").read()

bits = f"{len(data):032b}" + "".join(f"{b:08b}" for b in data)   # длина + данные
flat = bytearray(im.tobytes())                                   # R,G,B,R,G,B,... подряд
if len(bits) > len(flat):
    sys.exit(f"Не влезает: нужно {len(bits)} бит, а в картинке {len(flat)}")

for i, bit in enumerate(bits):
    flat[i] = (flat[i] & 0b11111110) | int(bit)                  # обнулить младший бит и записать свой

Image.frombytes("RGB", im.size, bytes(flat)).save(out, "PNG")   # только PNG/BMP: JPEG сотрёт биты
print(f"спрятано {len(data)} байт, занято {len(bits) / len(flat):.1%} ёмкости → {out}")
