{"id":16982703,"url":"https://github.com/calderwhite/gif-msg","last_synced_at":"2025-03-22T15:30:41.462Z","repository":{"id":43244315,"uuid":"229874746","full_name":"CalderWhite/gif-msg","owner":"CalderWhite","description":"Hide 127 bytes in a gif without touching any pixels or colors","archived":false,"fork":false,"pushed_at":"2022-11-22T07:54:36.000Z","size":938,"stargazers_count":33,"open_issues_count":2,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-18T12:47:17.971Z","etag":null,"topics":["cryptography","gifs","steganography","steganography-algorithms"],"latest_commit_sha":null,"homepage":"https://calderwhite.medium.com/hiding-data-from-humans-and-computers-in-gif-files-6d95523bf9bb","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CalderWhite.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":null,"support":null}},"created_at":"2019-12-24T05:13:31.000Z","updated_at":"2024-07-09T09:42:57.000Z","dependencies_parsed_at":"2023-01-21T15:02:49.751Z","dependency_job_id":null,"html_url":"https://github.com/CalderWhite/gif-msg","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CalderWhite%2Fgif-msg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CalderWhite%2Fgif-msg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CalderWhite%2Fgif-msg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CalderWhite%2Fgif-msg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CalderWhite","download_url":"https://codeload.github.com/CalderWhite/gif-msg/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244978395,"owners_count":20541848,"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":["cryptography","gifs","steganography","steganography-algorithms"],"created_at":"2024-10-14T02:09:10.927Z","updated_at":"2025-03-22T15:30:41.123Z","avatar_url":"https://github.com/CalderWhite.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gif-msg\n\ngif-msg hides a 128 byte message in a gif while keeping the pixel values identical.\nCan you figure out how I did it?\n\ngif's popular usage in messaging apps allow them to blend into conversations naturally.\nThis way users can send secret (potentially encrypted) messages to eachother without it\nbeing obvious to a 3rd party. This method of steganography is also largely applicable on message forums.\n\n## Installation\n\nPillow's gif encoder does not support lossless compression, so gifsicle is used\nto re-encode the gif such that its file size does not increase.\n\n```bash\n# Install dependancies\npip3 install -r requirements.txt\nsudo apt install gifsicle\n\n# Clone module\ngit clone https://github.com/CalderWhite/gif-msg/\ncd gif-msg\ngit submodule update --init --recursive\n```\n\n## Usage\n\nPlease use the [Latest Stable Release](https://github.com/CalderWhite/gif-msg/releases/latest) and note that the semantic versioning indicates when changes will not be backwards compatible (so the major release must match if you are to exchange gifs with another version).\n\n```\nusage: gif_msg.py [-h] [--key KEY] [--compress]\n                  command infile [outfile] [body]\n\nEncode/Decode 128 bytes into a gif file.\n\npositional arguments:\n  command     The command to be run (encode/decode)\n  infile      The input gif.\n  outfile     The outfile gif. (applicable for encode)\n  body        The message to be encoded. (applicable for encode)\n\noptional arguments:\n  -h, --help  show this help message and exit\n  --key KEY   If given a key, AES will be used to encrypt/decrypt the message\n              body.\n  --compress  If supplied, smaz will be used to compress the body. NOTE: This\n              is only effective with language, and binary data is best left\n              uncompressed\n\n```\n\n## Known Bugs\n\n- Greyscale gifs are not currently supported.\n- Gifs with \u003c256 colors can only hold n//2 bytes, where n=number of colors\n- Gifs with duplicate colors in their color palette\n\n**Note**: If there color white (`0xFFFFFF`) is in the color palette and the image has transparency, this will create a duplicate color error since PIL overwrites what is at the transparent index in the palette as `0xFFFFFF`)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcalderwhite%2Fgif-msg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcalderwhite%2Fgif-msg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcalderwhite%2Fgif-msg/lists"}