
LSB 방식을 기반으로 한 간단한 스테가노그래피 프로그램입니다.
스테가노그래피를 통해 이미지, 오디오, 비디오 파일에 정보를 인코딩하는 프로그램입니다. 아래와 같이 원시 문자열부터 파일까지 모든 유형의 데이터를 인코딩할 수 있습니다:
왼쪽은 스테가노그래피로 숨겨진 이미지가 있는 집입니다. 오른쪽은 추출된 숨겨진 고양이 이미지입니다. 호스트 이미지의 각 색상 성분에서 최하위 비트를 제외한 모든 비트를 제거하면 드러납니다.
JPEG 호스트는 DCT 계수 임베딩을 사용합니다. CLI에서는 Pillow가 읽을 수 있는 다른 이미지 형식은 저장 시 PNG로 변환됩니다. 웹 API는 위에 나열된 형식만 허용합니다. WAV는 유일하게 지원되는 오디오 형식입니다.
비디오 호스트는 FFmpeg로 디코딩되고, 견고한 DCT 신호로 프레임별로 임베딩된 후 MP4/H.264로 다시 기록됩니다. 비디오 디코더는 stegpy의 비디오 인코더로 생성된 파일을 위한 것입니다. stegpy 페이로드가 없는 임의의 비디오는 유용한 데이터를 디코딩하지 못합니다. 비디오 처리는 CPU를 많이 사용할 수 있으므로 호스팅되는 공개 웹 데모에서는 의도적으로 비활성화되어 있습니다. 비디오 호스트의 경우 CLI를 사용하거나 웹 앱을 로컬에서 실행하세요.
비디오 지원에는 ffmpeg 및 ffprobe 명령줄 도구도 필요합니다.
uv를 사용하여 PyPI에서 현재 릴리스를 명령줄 도구로 설치하세요:
uv tool install stegpy
stegpy -h
기존 설치를 업그레이드하려면:
uv tool upgrade stegpy
개발을 위해서는 저장소를 복제하고 uv로 환경을 생성하세요:
git clone https://github.com/izcoser/stegpy.git
cd stegpy
uv sync --dev
uv run stegpy -h
stegpy "Hello World!" image.png
stegpy _image.png
stegpy "Hello video!" clip.mp4
stegpy _clip.mp4
비디오 입력은 위에 나열된 지원되는 FFmpeg 판독 가능 컨테이너 중 하나일 수 있습니다. stegpy는 항상 인코딩된 비디오 출력을 MP4/H.264로 기록합니다.
데이터는 기본적으로 보호 없이 인코딩되지만, -p 플래그로 암호화할 수 있습니다:
stegpy "Hello World!" image.png -p
Enter password (will not be echoed):
Verify password (will not be echoed):
stegpy _image.png -p
Enter password (will not be echoed):
Hello World!
stegpy -h
Python 패키지로 구동되는 라이브 데모는 https://stegpy.coseri.xyz에서 이용할 수 있습니다.
저장소에서 FastAPI 애플리케이션과 브라우저 데모를 로컬에서 실행하세요:
uv run uvicorn stegpy.web:app --reload
그런 다음 http://127.0.0.1:8000을 여세요. web-demo/의 정적 파일은
FastAPI /api/* 백엔드가 필요하며 index.html을 직접 열어서는 작동하지 않습니다.
호스팅되는 데모는 PNG, BMP, GIF, WebP, WAV, JPEG 호스트, 텍스트 또는 파일 페이로드, 선택적 비밀번호 암호화를 지원합니다. 이미지/오디오 호스트 및 파일 페이로드 업로드는 20 MB로 제한되며, 텍스트 메시지는 1 MB로 제한됩니다. 용량 표시는 stegpy 헤더, 임베딩된 파일 이름, 암호화 오버헤드 이후의 사용 가능한 페이로드 바이트를 보여줍니다.
비디오 호스트는 비디오 처리가 소규모 서버의 CPU를 몇 분 동안 바쁘게 유지할 수 있기 때문에 localhost에서 실행할 때만 웹 UI에서 사용할 수 있습니다. 로컬 웹 UI는 최대 5 MB의 비디오 호스트를 허용합니다.
API는 또한 GET /api/health, POST /api/capacity,
POST /api/encode, POST /api/decode를 제공합니다. 대화형 API 문서는
로컬에서 실행할 때 http://127.0.0.1:8000/docs에서 이용할 수 있습니다.
이 프로젝트가 유용하다고 생각하시면 기부를 환영합니다.
Ethereum / EVM: 0xfE1039ba2d4973eb6F6dd1cF3BDAF24aa6cbff96