{"id":17623723,"url":"https://github.com/wiseaidev/stegano","last_synced_at":"2025-05-01T08:41:41.127Z","repository":{"id":210401741,"uuid":"726482387","full_name":"wiseaidev/stegano","owner":"wiseaidev","description":"A powerful and memory-safe steganography tool 🕵️‍♂️ (WIP)","archived":false,"fork":false,"pushed_at":"2024-12-09T14:59:00.000Z","size":80,"stargazers_count":7,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-11T10:45:49.049Z","etag":null,"topics":["aes","aes-128","aes-encryption","clap","crc32","encryption","jpeg","png","rust","steganography","xor-encryption"],"latest_commit_sha":null,"homepage":"http://docs.rs/stegano","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/wiseaidev.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-02T14:33:02.000Z","updated_at":"2025-02-05T18:57:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"b249cd92-2480-44ba-96de-004968afe723","html_url":"https://github.com/wiseaidev/stegano","commit_stats":null,"previous_names":["wiseaidev/stegano"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wiseaidev%2Fstegano","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wiseaidev%2Fstegano/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wiseaidev%2Fstegano/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wiseaidev%2Fstegano/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wiseaidev","download_url":"https://codeload.github.com/wiseaidev/stegano/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251849243,"owners_count":21653838,"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","aes-128","aes-encryption","clap","crc32","encryption","jpeg","png","rust","steganography","xor-encryption"],"created_at":"2024-10-22T21:42:32.519Z","updated_at":"2025-05-01T08:41:41.102Z","avatar_url":"https://github.com/wiseaidev.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🕵️‍♂️ Stegano\n\n[![Crates.io](https://img.shields.io/crates/v/stegano.svg)](https://crates.io/crates/stegano)\n[![Crates.io Downloads](https://img.shields.io/crates/d/stegano)](https://crates.io/crates/stegano)\n![Rust](https://img.shields.io/badge/rust-stable-orange)\n[![License](https://img.shields.io/crates/l/stegano.svg)](https://opensource.org/licenses/MIT)\n\n![Logo](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ushyby2i2b14qbndshg5.png)\n\n\u003e 🚀 `stegano`: Stegano is a powerful and versatile steganography tool designed to empower you with a wide range of image manipulation and data encryption capabilities.\n\n## 📖 Table of Contents\n\n- [Installation](#-installation)\n- [Features](#-features)\n- [Usage](#-usage)\n- [Options](#-options)\n- [Contributing](#-contributing)\n- [License](#-license)\n\n## 🚀 Installation\n\nTo install `stegano`, use the following Cargo command:\n\n```bash\ncargo install --locked stegano\n```\n\n## 🖼️ Features\n\n- Parse both PNG and JPEG images effortlessly.\n- Gain insights into the internal structure of PNG images with a hex dump view.\n- Seamlessly inject payloads into images at the `IEND - 8` bytes position marker.\n- Safely hide your data without compromising the integrity of the original image.\n- Utilize the AES-128 algorithm for secure encryption and decryption of hidden data.\n- No limitations on the length of the payload that can be injected.\n\n## 🛠️ Usage\n\n`stegano` provides three subcommands:\n\n```bash\n$ stegano -h\n\nThe ultimate steganography swiss knife army tool.\n\nUsage: stegano [COMMAND]\n\nCommands:\n  encrypt    Subcommand for encryption\n  decrypt    Subcommand for decryption\n  show-meta  Subcommand for showing metadata\n  help       Print this message or the help of the given subcommand(s)\n\nOptions:\n  -h, --help     Print help\n  -V, --version  Print version\n\n```\n\n```bash\n$ stegano encrypt -h\n\nSubcommand for encryption\n\nUsage: stegano encrypt [OPTIONS] --input \u003cINPUT\u003e\n\nOptions:\n  -i, --input \u003cINPUT\u003e      Sets the input file for injecting the payload\n  -o, --output \u003cOUTPUT\u003e    Sets the output file for generating a new file with the injected payload [default: output.png]\n  -k, --key \u003cKEY\u003e          Sets the key for payload encryption [default: key]\n  -s, --suppress           Suppresses output messages\n  -f, --offset \u003cOFFSET\u003e    Sets the offset [default: 10]\n  -p, --payload \u003cPAYLOAD\u003e  Sets the payload [default: hello]\n  -t, --type \u003cTYPE\u003e        Sets the type [default: PNG]\n  -h, --help               Print help\n  -V, --version            Print version\n\n```\n\n```bash\n$ stegano decrypt -h\nSubcommand for decryption\n\nUsage: stegano decrypt [OPTIONS] --input \u003cINPUT\u003e\n\nOptions:\n  -i, --input \u003cINPUT\u003e      Sets the input file for decrypting and extracting the payload\n  -o, --output \u003cOUTPUT\u003e    Sets the output file for generating a new file with no payload, aka restoring the original file [default: output.png]\n  -k, --key \u003cKEY\u003e          Sets the key for payload encryption [default: key]\n  -s, --suppress           Suppresses output messages\n  -f, --offset \u003cOFFSET\u003e    Sets the offset [default: 10]\n  -p, --payload \u003cPAYLOAD\u003e  Sets the payload [default: hello]\n  -t, --type \u003cTYPE\u003e        Sets the type [default: PNG]\n  -h, --help               Print help\n  -V, --version            Print version\n```\n\n```bash\n$ stegano show-meta -h\n\nSubcommand for showing metadata\n\nUsage: stegano show-meta [OPTIONS] --input \u003cINPUT\u003e\n\nOptions:\n  -i, --input \u003cINPUT\u003e          Sets the image input file\n  -n, --nb-chunks \u003cNB_CHUNKS\u003e  Read number of chunks [default: 100]\n  -s, --start \u003cSTART_CHUNK\u003e    The index of the start chunk to read from [default: 0]\n  -e, --end \u003cEND_CHUNK\u003e        The index of the end chunk to stop reading at [default: 100]\n  -r, --suppress               Suppresses output messages\n  -t, --type \u003cTYPE\u003e            Sets the type [default: PNG]\n  -h, --help                   Print help\n  -V, --version                Print version\n```\n\nUse these subcommands to process and manipulate png and jpeg images. Here are some examples:\n\n1. Read and process 10 chunks from a png image: \n\n   ```bash\n   $ stegano show-meta -i image_file_name -n 10\n   It is a valid PNG file. Let's process it! \n\n   ---- Header ----\n   00000000 | 89 50 4E 47 0D 0A 1A 0A | .PNG....\n   ----- End ------\n\n   ---- Chunk #0 ----\n   Offset: 8\n   Size: 71\n   CRC: 48142467\n   00000008 | 00 00 00 0D 49 48 44 52 00 00 05 A0 00 00 03 D0 08 06 00 00 | ....IHDR............\n   00000028 | 00 C0 52 DC 33 00 00 00 01 73 52 47 42 00 AE CE 1C E9 00 00 | ..R.3....sRGB.......\n   00000048 | 20 00 49 44 41 54 78 5E EC 9D 07 98 24 45 D9 80 BF DD 0B 5C | ..IDATx^....$E.....\\\n   00000068 | E2 8E 8C 24 C9 41 50 09 82 A8 80 | ...$.AP....\n   ------- End -------\n\n   ---- Chunk #1 ----\n   Offset: 83\n   Size: 17\n   CRC: 241924a7\n   00000083 | A2 64 38 B2 81 20 19 91 24 0A 28 48 D2 9F AC 92 91 | .d8.....$.(H.....\n   ------- End -------\n\n   ---- Chunk #2 ----\n   Offset: 112\n   Size: 3\n   CRC: 9e0e55d5\n   00000112 | ED D9 EE | ...\n   ------- End -------\n\n   ---- Chunk #3 ----\n   Offset: 127\n   Size: 51\n   CRC: 400002d6\n   00000127 | B2 53 5D F5 D5 5B D5 7D C7 3B DF 7E D5 F5 C7 DB EF EF 15 AE | .S]..[.}.;.~........\n   00000147 | 52 08 F4 F6 82 36 0A 16 1E A5 6C 34 3A 85 00 04 20 00 01 08 | R....6....l4:.......\n   00000167 | 40 00 02 10 80 00 04 20 00 01 08 | @..........\n   ------- End -------\n\n   ---- Chunk #4 ----\n   Offset: 190\n   Size: 4\n   CRC: fa7621a0\n   00000190 | BA E0 51 D6 | ..Q.\n   ------- End -------\n\n   ---- Chunk #5 ----\n   Offset: 206\n   Size: 60\n   CRC: 1084000\n   00000206 | FD EF 30 7A 84 00 04 20 00 01 08 40 00 02 10 80 00 04 20 00 | ..0z.......@........\n   00000226 | 01 08 40 00 02 3E 09 20 5F 03 9A 88 68 9F FB AA D6 17 02 DA | ..@..\u003e.._...h.......\n   00000246 | 33 53 E4 33 C2 D9 F3 96 A2 3B 08 40 00 02 10 80 00 04 20 00 | 3S.3.....;.@........\n   ------- End -------\n\n   ---- Chunk #6 ----\n   Offset: 278\n   Size: 2\n   CRC: 5b4823a1\n   00000278 | 02 03 | ..\n   ------- End -------\n\n   ---- Chunk #7 ----\n   Offset: 292\n   Size: 4\n   CRC: 3d6e1dba\n   00000292 | 4B 3E 23 9A | K\u003e#.\n   ------- End -------\n\n   ---- Chunk #8 ----\n   Offset: 308\n   Size: 4\n   CRC: 42000\n   00000308 | 00 02 10 80 | ....\n   ------- End -------\n\n   ---- Chunk #9 ----\n   Offset: 324\n   Size: 1\n   CRC: 886924b4\n   00000324 | E0 | .\n   ------- End -------\n   ```\n\n1. Process the png image in silent mode: \n\n   ```bash\n   $ stegano show-meta -i image_file_name -r\n   ```\n\n1. Read and process a jpeg image.\n   ```bash\n   $ stegano show-meta -i image_file_name -t jpeg\n   JFIF Header: JfifHeader { version: 18758 }\n   SOF Header for Chunk#67: SofHeader { jpeg_obj: JpegObj { precision: 8, image_height: 243, image_width: 207, number_of_components: 3, comp_id: [1, 2, 3], hsamp_factor: [2, 1, 1], vsamp_factor: [2, 1, 1], qtable_number: [0, 1, 1], dctable_number: [1, 2, 3], actable_number: [11, 12, 13, 14], ss: 0, se: 63, ah: 0, al: 0 } }\n   Processing DHT Header for Chunk#68: \n   Processing DHT Header for Chunk#69: \n   Processing DHT Header for Chunk#70: \n   Processing DHT Header for Chunk#71: \n   SOS Header for Chunk#72: SosHeader { jpeg_obj: JpegObj { precision: 3, image_height: 243, image_width: 207, number_of_components: 3, comp_id: [17], hsamp_factor: [3], vsamp_factor: [15], qtable_number: [0], dctable_number: [0], actable_number: [0], ss: 0, se: 0, ah: 0, al: 0 } }\n   ```\n\n   Sometimes the `JFIF` header doesn't exist, but it is still a valid jpeg file:\n\n   ```bash\n   $ stegano show-meta -i image_file_name -t jpeg\n   DQT Header for Chunk#1: DqtHeader { dct: DctStruct { quantum: [[8, 2054, 1542, 1543, 1798, 1541, 1288, 2055, 1799, 1799, 1801, 2313, 2312, 2058, 2572, 3092, 5133, 3340, 3083, 2827, 2828, 3097, 6418, 4627, 4879, 3860, 5149, 7450, 6687, 7966, 7709, 7450, 6684, 7196, 7200, 8228, 9262, 11815, 10016, 8226, 8748, 11299, 8988, 7196, 7208, 10295, 14121, 10540, 11312, 12337, 12596, 13364, 13364, 13343, 7975, 10041, 14653, 15672, 14386, 12860, 15406, 11827, 13108, 13362], [12801, 265, 2313, 2313, 2316, 3083, 2828, 3096, 6157, 3341, 3352, 6194, 12833, 8476, 7201, 8498, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 12850, 0]] } }\n   SOF Header for Chunk#3: SofHeader { jpeg_obj: JpegObj { precision: 8, image_height: 460, image_width: 460, number_of_components: 3, comp_id: [1, 2, 3], hsamp_factor: [2, 1, 1], vsamp_factor: [2, 1, 1], qtable_number: [0, 1, 1], dctable_number: [1, 2, 3], actable_number: [11, 12, 13, 14], ss: 0, se: 63, ah: 0, al: 0 } }\n   Processing DHT Header for Chunk#4: \n   SOS Header for Chunk#5: SosHeader { jpeg_obj: JpegObj { precision: 3, image_height: 460, image_width: 460, number_of_components: 3, comp_id: [17], hsamp_factor: [3], vsamp_factor: [15], qtable_number: [0], dctable_number: [0], actable_number: [0], ss: 0, se: 0, ah: 0, al: 0 } }\n   ```\n\n1. Read chunks at different positions: \n\n   ```bash\n   # Read 1 chunk starting from position 0\n   $ stegano show-meta -i image_file_name -s 0 -e 10 -n 1\n   It is a valid PNG file. Let's process it! \n\n   ---- Header ----\n   00000000 | 89 50 4E 47 0D 0A 1A 0A | .PNG....\n   ----- End ------\n\n   ---- Chunk #0 ----\n   Offset: 8\n   Size: 71\n   CRC: 48142467\n   00000008 | 00 00 00 0D 49 48 44 52 00 00 05 A0 00 00 03 D0 08 06 00 00 | ....IHDR............\n   00000028 | 00 C0 52 DC 33 00 00 00 01 73 52 47 42 00 AE CE 1C E9 00 00 | ..R.3....sRGB.......\n   00000048 | 20 00 49 44 41 54 78 5E EC 9D 07 98 24 45 D9 80 BF DD 0B 5C | ..IDATx^....$E.....\\\n   00000068 | E2 8E 8C 24 C9 41 50 09 82 A8 80 | ...$.AP....\n   ------- End -------\n\n   # Read 3 chunks starting from position 40000\n   $ stegano show-meta -i image_file_name -s 40000 -e 200000 -n 3\n   It is a valid PNG file. Let's process it! \n\n   ---- Header ----\n   00000000 | 89 50 4E 47 0D 0A 1A 0A | .PNG....\n   ----- End ------\n\n   ---- Chunk #40000 ----\n   Offset: 40000\n   Size: 49\n   CRC: e3a1975e\n   00040000 | 16 03 F2 3B 23 05 BD 79 7E AE 37 2D 90 1C E8 B8 4F E7 2E 34 | ...;#..y~.7-....O..4\n   00040020 | 42 9E 43 55 01 1D 6E 01 6D AD 7E 76 5A 40 CB 6A 6A 6B 2C 87 | B.CU..n.m.~vZ@.jjk,.\n   00040040 | 87 06 84 5C 1D 8B 60 67 11 | ...\\..`g.\n   ------- End -------\n\n   ---- Chunk #40001 ----\n   Offset: 40061\n   Size: 28\n   CRC: 2200002\n   00040061 | E3 40 40 07 F1 F6 C2 A1 20 00 02 20 00 02 20 00 02 20 00 02 | .@@.................\n   00040081 | 20 00 02 20 00 02 20 00 | ........\n   ------- End -------\n\n   ---- Chunk #40002 ----\n   Offset: 40101\n   Size: 17\n   CRC: 4f13b5a6\n   00040101 | 11 B1 EC B9 11 A1 9E 89 AC 4A 58 4B D6 32 DB C7 D8 | .........JXK.2...\n   ------- End -------\n   ```\n\n1. Encrypt and inject data in an image:\n\n\u003e [!NOTE]\nStegano automatically identifies the location of the `IEND` marker in a PNG image and injects the payload at a position 8 bytes before the IEND marker by default. This is done to prevent any corruption of the original image.\n\n   ```bash\n   $ stegano encrypt -i input_image_file_name -k 'pass' -p 'hello' -o output_image_file_name\n   It is a valid PNG file. Let's process it! \n\n   ---- Header ----\n   00000000 | 89 50 4E 47 0D 0A 1A 0A | .PNG....\n   ----- End ------\n\n   ------- Chunk -------\n   Offset: 159028\n   Size: 48\n   CRC: 13a29bcc\n   00159028 | 03 AE 73 9D 60 28 1A F1 20 A0 EB 10 39 11 28 9D FC 85 5E DB | ..s.`(......9.(...^.\n   00159048 | D2 D3 7A 45 B1 71 EE 4F 4C 66 0C E8 FC 85 5E DB D2 D3 7A 45 | ..zE.q.OLf....^...zE\n   00159068 | B1 71 EE 4F 4C 66 0C E8 | .q.OLf..\n   -------- End --------\n\n   Your payload has been encrypted and written at offset 159028 successfully!\n   ```\n\n\u003e [!NOTE]\nBy default, the maximum key length is restricted to 16 characters.\n\n1. Using the previously obtained offset, you can decrypt and extract the secret information from an image, as well as remove the secret content from the image:\n\n   ```bash\n   $ stegano decrypt -i input_image_file_name -k 'pass' -f 159028 -o output_image_file_name -s\n   Your decrypted secret is: \"hello\"\n   ```\n\n1. if wrong key is provided: \n\n   ```bash\n   $ stegano decrypt -i input_image_file_name -k 'invalid' -f 159028 -o output_image_file_name\n   Your decrypted secret is: \"qji~s\"\n   ```\n\n1. if wrong key and wrong offset are provided: \n\n   ```bash\n   $ stegano decrypt -i input_image_file_name -k 'invalid' -f 159024 -o output_image_file_name\n   It is a valid PNG file. Let's process it! \n\n   ---- Header ----\n   00000000 | 89 50 4E 47 0D 0A 1A 0A | .PNG....\n   ----- End ------\n\n   ------- Chunk -------\n   Offset: 159021\n   Size: 36\n   CRC: 1348f762\n   00159024 | F1 B0 E8 48 9E AD 1E 56 A5 82 7C 3B 14 D4 8C 1D E7 1A 90 47 | ...H...V..|;.......G\n   00159044 | A0 1D D2 90 04 71 2F 01 AA 91 86 6D | .....q/....m\n   -------- End --------\n\n   Your decrypted secret is: \"��H��\\u{1e}V��|;\\u{14}Ԍ\\u{1d}�\\u{1a}�G�\\u{1d}Ґ\\u{4}q/\\u{1}���m\"\n   ```\n\n1. if correct key and wrong offset are provided: \n\n   ```bash\n   $ stegano decrypt -i input_image_file_name -k 'pass' -f 159024 -o output_image_file_name\n   It is a valid PNG file. Let's process it! \n\n   ---- Header ----\n   00000000 | 89 50 4E 47 0D 0A 1A 0A | .PNG....\n   ----- End ------\n\n   ------- Chunk -------\n   Offset: 159021\n   Size: 36\n   CRC: fc855edb\n   00159024 | 67 47 07 E6 DC 5D 27 34 CB 51 A4 63 66 C1 C5 F4 5A A2 6B 5C | gG...]'4.Q.cf...Z.k\\\n   00159044 | 28 24 BF 53 BC 21 59 04 1B F6 FC 21 | ($.S.!Y....!\n   -------- End --------\n\n   Your decrypted secret is: \"gG\\u{7}��]'4�Q�cf���Z�k\\\\($�S�!Y\\u{4}\\u{1b}��!\"\n   ```\n\n\u003e [!NOTE]\nBy default, Stegano uses the AES-128 encryption algorithm. The maximum key length supported is 16 characters. If you provide a longer key, it will be automatically padded or truncated to fit the required length.\n\n## 🎨 Options\n\n| Option                  | Description                                               |\n|-------------------------|-----------------------------------------------------------|\n| **Encryption Options**  |                                                           |\n| `-a` or `--algo`        | Sets the algorithm for encryption (default is \"aes\").        |\n| `-i` or `--input`       | Sets the input file for encryption.                        |\n| `-o` or `--output`      | Sets the output file for the encrypted payload (default is \"output.png\").|\n| `-k` or `--key`         | Sets the key for payload encryption (default is \"key\").    |\n| `-s` or `--suppress`    | Suppresses output messages.                                |\n| `-f` or `--offset`      | Sets the offset (default is 9999999999 for auto injection: IEND - 8 bytes).  |\n| `-p` or `--payload`     | Sets the payload (default is \"hello\").                     |\n| `-t` or `--type`        | Sets the type (default is \"PNG\").                          |\n|                         |                                                           |\n| **Decryption Options**  |                                                           |\n| `-a` or `--algo`        | Sets the algorithm for decryption (default is \"aes\").        |\n| `-i` or `--input`       | Sets the input file for decryption.                        |\n| `-o` or `--output`      | Sets the output file for the decrypted payload (default is \"output.png\").|\n| `-k` or `--key`         | Sets the key for payload decryption (default is \"key\").    |\n| `-s` or `--suppress`    | Suppresses output messages.                                |\n| `-f` or `--offset`      | Sets the offset (default is 9999999999) for auto decryption: IEND - 8 bytes).  |\n| `-p` or `--payload`     | Sets the payload (default is \"hello\").                     |\n| `-t` or `--type`        | Sets the type (default is \"PNG\").                          |\n|                         |                                                           |\n| **Metadata Options**    |                                                           |\n| `-i` or `--input`       | Sets the input image file for metadata extraction.         |\n| `-n` or `--nb-chunks`   | Read a specific number of chunks (default is 100).          |\n| `-s` or `--start`       | Sets the index of the start chunk to read from (default 0). |\n| `-e` or `--end`         | Sets the index of the end chunk to stop reading at (default 100).|\n| `-r` or `--suppress`    | Suppresses output messages.                                |\n| `-z` or `--read-end`    | Read from start or end of file (default is reading from the start of image). |\n\n## 🤝 Contributing\n\nContributions and feedback are welcome! If you'd like to contribute, report an issue, or suggest an enhancement, please engage with the project on [GitHub](https://github.com/wiseaidev/stegano).\nYour contributions help improve this crate for the community.\n\n## 📄 License\n\nThis project is licensed under the [MIT License](https://opensource.org/licenses/MIT).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwiseaidev%2Fstegano","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwiseaidev%2Fstegano","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwiseaidev%2Fstegano/lists"}