{"id":28639354,"url":"https://github.com/saltukalakus/pixellock","last_synced_at":"2025-06-12T19:40:00.459Z","repository":{"id":295239981,"uuid":"989568613","full_name":"saltukalakus/PixelLock","owner":"saltukalakus","description":"Military-grade security for storing your files","archived":false,"fork":false,"pushed_at":"2025-06-08T17:49:24.000Z","size":22908,"stargazers_count":25,"open_issues_count":6,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-08T18:28:20.642Z","etag":null,"topics":["aes-gcm","argon2","decryption","encryption","files","image","secure","secure-storage","security","steganography"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/saltukalakus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-24T11:16:16.000Z","updated_at":"2025-06-08T17:49:27.000Z","dependencies_parsed_at":"2025-06-08T18:33:54.705Z","dependency_job_id":null,"html_url":"https://github.com/saltukalakus/PixelLock","commit_stats":null,"previous_names":["saltukalakus/pixellock"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/saltukalakus/PixelLock","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saltukalakus%2FPixelLock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saltukalakus%2FPixelLock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saltukalakus%2FPixelLock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saltukalakus%2FPixelLock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/saltukalakus","download_url":"https://codeload.github.com/saltukalakus/PixelLock/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saltukalakus%2FPixelLock/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259520285,"owners_count":22870415,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aes-gcm","argon2","decryption","encryption","files","image","secure","secure-storage","security","steganography"],"created_at":"2025-06-12T19:39:57.010Z","updated_at":"2025-06-12T19:40:00.446Z","avatar_url":"https://github.com/saltukalakus.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"![PixelLock](https://github.com/saltukalakus/PixelLock/blob/main/PixelLock.png)\n\n[![Rust CI](https://github.com/saltukalakus/PixelLock/actions/workflows/rust.yml/badge.svg?branch=main)](https://github.com/saltukalakus/PixelLock/actions/workflows/rust.yml)\n\n##\n\nPixelLock is a command-line tool to secure your files with military-grade encryption. It helps enhance privacy and provide an additional layer of security while storing your sensitive files. \n\nAny file can be secured with PixelLock. Most file types are supported by file format detection. PixelLock falls back to using file extension as a source of truth if the format is not recognized.\n\nThe tool allows generating encrypted files in two different formats: Base64 text or a PNG image. \n\nYou may optionally pass a PNG-formatted carrier base image to hide your encrypted file in it. When the base image is provided, the tool allows configuring the blending ratio to adjust the output image distortion level vs the final image size. If the base image size isn't sufficient to hide your secret file, PixelLock automatically tiles it to enlarge the base image.\n\nFeel free to open any feature requests in the issues section. Please check existing open issues before opening a new one. Also don't forget to ⭐️ the project if you find it useful 🤩\n\n![Flow](https://github.com/saltukalakus/PixelLock/blob/main/Flow.png)\n\n\n##  ✨ Building the Project ✨\n\nRequirements\n- Rust (1.87.0 or later)\n- Cargo (1.87.0 or later)\n\n[Go to the installation guide.](https://www.rust-lang.org/learn/get-started)\n\n   ```bash\n   git clone https://github.com/saltukalakus/PixelLock.git\n   cd PixelLock\n   cargo build --release\n   ```\n\nThese steps generate the executable **PixelLock** in the `/target/release` directory. I have used a Mac M2 Pro for testing. If you experience any issues on other hardware or operating systems, please open an issue.\n\n## 🪄 Usage 🪄\n\n* Encrypting a single file, embedding it into a provided base PNG:\n```bash\n\u003e pixellock -e -i ./secret_image.jpeg -o ./stego_image -b ./my_base.png\n# Output will be ./stego_image.png (using my_base.png as a carrier, 1 LSB)\n```\n\n* Decrypting a steganographic PNG image to reveal the secret file:\n```bash\n\u003e pixellock -d -i ./stego_image.png -o ./secret_image\n# Output extension will be based on detected original format, e.g., ./secret_image.jpeg\n```\n\n* Encrypting all files in a folder, embedding them into a provided base PNG:\n```bash\n\u003e pixellock -e -i ./image-folder -o ./stego_folder -b ./my_base.png\n\nInput\n ├── img-folder\n     └── Image1.jpg\n     └── Image2.png\n     └── doc.pdf\nOutput\n ├── stego_folder\n     └── Image1.jpg.png\n     └── Image2.png.png\n     └── doc.pdf.png\n```\n\n* Decrypting all steganographic PNG images in a folder to an output folder:\n```bash\n\u003e pixellock -d -i ./stego_folder -o ./image-folder\n\nInput\n ├── stego_folder\n     └── Image1.jpg.png\n     └── Image2.png.png\n     └── doc.pdf.png\nOutput\n ├── img-folder\n     └── Image1.jpg\n     └── Image2.png\n     └── doc.pdf\n```\n\n*  📖 For a full list of available options, try the help command:\n\n```bash\n\u003e pixellock --help  \n```\n\n## 🧪 Running Tests 🧪\n\nTo run end-to-end tests execute the `cargo test` command in the project root directory. \n\n```bash\n\u003e cargo test  \n```\nThe tests in the `./tests` folder create unique temporary subdirectories under `./tests/tmp/` for their output. Each specific test operation (e.g., for a particular image and settings) will ensure its output subdirectory is cleared before it runs, providing a clean environment for that operation's artifacts. The `./tests/tmp/` directory itself will contain these subdirectories, which are not deleted after the entire test suite finishes, allowing for inspection of outputs.\n\n\n## 💥 Security Challenge 💥\n\nThis is an open challenge for those interested in bug bounties. Find a way to decrypt the secret images in this [Gist](https://gist.github.com/saltukalakus/dc02e23eb2cf51c414bc58c8002af32e). If you can decrypt at least one of the images, you win 500 GBP 💰 \n\nThe challenge is time-boxed. It will end on July 31, 2025, at 1 PM UTC. I will share the secret in the same Gist in the comments section if no one can hack it by then. All the other details are in the Gist including the terms and conditions.\n\nTo the best of my knowledge, the security choices and the libraries used in this project are solid. If you are able to break it, you must be a real 🧙‍♂️.\n\n## 👩‍⚖️ Disclaimer 👨‍⚖️\n\nPixelLock is provided \"as is\" without any warranties or guarantees of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, or non-infringement. The author of this tool disclaims all liability for any damages, losses, or claims arising from the use or misuse of this tool. By using PixelLock, you acknowledge and agree that it is your sole responsibility to ensure the security and proper usage of this tool, and the author shall not be held liable for any consequences resulting from its use.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaltukalakus%2Fpixellock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaltukalakus%2Fpixellock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaltukalakus%2Fpixellock/lists"}