StegApp is a privacy-focused Android messaging application that hides encrypted messages inside images using advanced Steganography techniques. Built with a modern tech stack, it ensures that your conversations look like innocent image exchanges to any third-party observer.
- Pixels are the Password: Messages are embedded directly into the pixel data of images using Python-powered algorithms (running natively on Android via ChaquoPython).
- Invisible Encryption: Uses LSB (Least Significant Bit) and PVD (Pixel Value Differencing) techniques to ensure images look virtually identical to the original.
- Real-Time Global Chat: Powered by a Python FastAPI backend and Socket.IO for instant, low-latency messaging anywhere in the world.
- Cloud Synchronization:
- MongoDB Atlas: Persists user accounts and chat metadata securely.
- Cloudinary: Handles high-speed, lossless image storage to preserve steganographic data.
- Local-First Architecture:
- Room Database: caches chats offline.
- Jetpack Compose: provides a fluid, modern Material 3 UI.
- Language: Kotlin
- UI Framework: Jetpack Compose (Material 3)
- Architecture: MVVM (Model-View-ViewModel) + Repository Pattern
- Storage: Room Database (SQLite), DataStore
- Networking: Retrofit, OkHttp, Socket.IO Client
- Python Integration: ChaquoPython (for Steganography algorithms)
- Framework: FastAPI (Python)
- Real-time: Python-SocketIO
- Database: MongoDB Atlas
- Storage: Cloudinary (Lossless optimization)
- Hosting: Render.com
- Clone the repository.
- Open in Android Studio Ladybug (or newer).
- Sync Gradle dependencies.
- Build & Run on an Emulator or Physical Device.
If you want to run your own backend instead of using the public one:
cd server
pip install -r requirements.txt
# Create .env file with CLOUDINARY and MONGODB keys
uvicorn main:app --reload- Sender selects an image and types a secret message + password.
- StegApp embeds the text into the image pixels locally.
- The image is uploaded to Cloudinary (lossless) and delivered to the recipient.
- Recipient taps the image and enters the password.
- The hidden text is extracted and displayed!
Pull requests are welcome! For major changes, please open an issue first to discuss what you would like to change.