{"id":29935038,"url":"https://github.com/enrichman/stegosecrets","last_synced_at":"2026-03-17T11:33:30.694Z","repository":{"id":61840050,"uuid":"553873559","full_name":"enrichman/stegosecrets","owner":"enrichman","description":"Encrypt and share secrets among trusted peers with AES-256, SSS and steganography","archived":false,"fork":false,"pushed_at":"2024-02-27T00:04:45.000Z","size":7040,"stargazers_count":42,"open_issues_count":5,"forks_count":11,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-08T08:31:08.201Z","etag":null,"topics":["aes","aes-encryption","go","golang","hacktoberfest","shamir-secret-sharing","sss","steganography"],"latest_commit_sha":null,"homepage":"","language":"Go","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/enrichman.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2022-10-18T22:58:49.000Z","updated_at":"2025-10-05T15:23:38.000Z","dependencies_parsed_at":"2024-06-20T00:18:48.127Z","dependency_job_id":"5950aac0-2874-45d2-9ee5-7e5465227cc2","html_url":"https://github.com/enrichman/stegosecrets","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/enrichman/stegosecrets","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enrichman%2Fstegosecrets","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enrichman%2Fstegosecrets/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enrichman%2Fstegosecrets/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enrichman%2Fstegosecrets/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enrichman","download_url":"https://codeload.github.com/enrichman/stegosecrets/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enrichman%2Fstegosecrets/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30622747,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-17T11:26:08.186Z","status":"ssl_error","status_checked_at":"2026-03-17T11:24:37.311Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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-encryption","go","golang","hacktoberfest","shamir-secret-sharing","sss","steganography"],"created_at":"2025-08-02T20:09:05.354Z","updated_at":"2026-03-17T11:33:30.675Z","avatar_url":"https://github.com/enrichman.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# StegoSecretS\n\n![stego](doc/assets/stego_s.png)\n\n[![Lint Status](https://github.com/enrichman/stegosecrets/workflows/golangci-lint/badge.svg)](https://github.com/enrichman/stegosecrets/actions)\n[![CI Status](https://github.com/enrichman/stegosecrets/workflows/CI/badge.svg)](https://github.com/enrichman/stegosecrets/actions)\n[![Go Report Card](https://goreportcard.com/badge/github.com/enrichman/stegosecrets)](https://goreportcard.com/report/github.com/enrichman/stegosecrets)\n[![Coverage](https://img.shields.io/codecov/c/github/enrichman/stegosecrets?logo=codecov)](https://img.shields.io/codecov/c/github/enrichman/stegosecrets?logo=codecov)  \n[![License](https://img.shields.io/github/license/enrichman/stegosecrets)](https://img.shields.io/github/license/enrichman/stegosecrets)\n[![Go](https://img.shields.io/github/go-mod/go-version/enrichman/stegosecrets)](https://img.shields.io/github/go-mod/go-version/enrichman/stegosecrets)\n[![Release](https://img.shields.io/github/v/release/enrichman/stegosecrets)](https://img.shields.io/github/v/release/enrichman/stegosecrets)\n[![GoDoc](https://godoc.org/github.com/enrichman/stegosecrets?status.svg)](https://godoc.org/github.com/enrichman/stegosecrets)\n\n\nStegoSecretS combines [AES-256](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) encryption, [Shamir's Secret Sharing (SSS)](https://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing) and [steganography](https://en.wikipedia.org/wiki/Steganography)!\n\nIt helps you share a secret among other trusted peers, keeping a minimum threshold of keys to recover the original one.\nThe partial keys will also be hidden inside images, adding an additional layer of \"security\".\n\n***Note:** the project is under active development. The APIs are subject to change!*\n\n## Quickstart\n\n### Installation\n\nYou can install the `stego` CLI with brew\n```bash\nbrew install enrichman/tap/stegosecrets\n```\nor getting the [latest release](https://github.com/enrichman/stegosecrets/releases/latest), or building it from source.\n\n### Encrypt / Decrypt\n\nTLDR: go to the [usage](#usage) section for more details\n```\nstego encrypt --file mysecret.txt --parts 5 --threshold 3\n```\n```\nstego decrypt --file mysecret.txt.enc --img 001.jpg --key 002.key --img 003.jpg\n```\n\n## How does it work?\n\nAlice wants to protect her new \"patent pending nuclear blender project\" from EvilCompany.  \nThey want it, so she asks her friends Bob, Charlie and Dave to keep it safe.  \nShe trusts them, but to add an additional layer of security she emails them an encrypted file and an image of a cat containing a special key. 🐈\n\n![](doc/assets/stego5_1.png)\n\nWith this special key Bob alone is not able to decrypt the secret, so even if someone from EvilCompany gets the hands on his secret it will be useless. They will still need to get Charlie's and Dave's keys.\n\n![](doc/assets/stego6_1.png)\n\n### Ok, but.. how does it work?\n\nAn input file (or message) will be encrypted using AES-256 with a crypto secure random 32 bit key. This key will be then split in `p` parts with Shamir's Secret Sharing algorithm (SSS).  \nA `t` threshold of partial keys is needed to recover the original one and decrypt the secret.\n\n![IMG](doc/assets/stego1.png)\n\nFor example, encrypting the file having 5 `parts` with a `threshold` of 3 will split the `master-key` into 5 pieces. These pieces will be also hidden into 5 images. To reconstruct the original master key at least 3 partial keys and/or images are needed.\n\n![IMG](doc/assets/stego4.png)\n\n\n## Usage\n\n### encrypt\n\nTo encrypt a file you can explicit the filename:\n\n```\nstego encrypt --file mysecret.txt -p 5 -t 3\n```\n\nor you can write the message:\n```\n-\u003e % stego encrypt -p 5 -t 3\nEnter text: my secret message\n```\n\nThis will generate (a lot) of files:\n\n```\n# out\nmysecret.txt.checksum\nmysecret.txt.enc\nmysecret.txt.enc.checksum\nmysecret.txt.key\n\n001.jpg\n001.jpg.checksum\n001.key\n002.jpg\n002.jpg.checksum\n002.key\n...\n005.jpg\n005.jpg.checksum\n005.key\n```\n\nMain files:\n- `mysecret.txt.checksum` is the sha256 checksum of the `mysecret.txt` file (used to check a successful decryption)\n- `mysecret.txt.enc` is the encrypted file\n- `mysecret.txt.enc.checksum` is the sha256 checksum of the `mysecret.txt.enc`\n- `mysecret.txt.key` is the master key used to encrypt/decrypt the secret\n\nPartial files:\n- `n.key` the `n` partial key\n- `n.jpg` the `n` image where the `n` partial key is hidden\n- `n.jpg.checksum` is the sha256 checksum of the `n.jpg` image\n\n**Note*:* If no parts are specified the `master-key` will not be split. Keep it safely stored or delete it.  \n\n\nChecksums can be used to check the integrity of the files:\n\n```\n-\u003e % sha256sum --check mysecret.txt.enc.checksum\nmysecret.txt.enc: OK\n```\n\n### decrypt\n\nTo decrypt a file just use enough keys and/or images:\n\n```\nstego decrypt --file mysecret.txt.enc --key 001.key --key 002.key --img 003.jpg\n```\n\nalso the master key alone can be used to decrypt the file:\n\n```\nstego decrypt --file mysecret.txt.enc --master-key mysecret.txt.key\n```\n\n\n### images\n\nTo hide the partial keys with steganography you will need a folder with some images.  \nTo get some random images from https://picsum.photos/ the `images` command can be used. They will be stored in the `images` folder.\n\n```\nstego images\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenrichman%2Fstegosecrets","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenrichman%2Fstegosecrets","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenrichman%2Fstegosecrets/lists"}