{"id":24576601,"url":"https://github.com/thavixt/steganography-js","last_synced_at":"2025-10-17T04:34:31.408Z","repository":{"id":22160509,"uuid":"117333394","full_name":"thavixt/steganography-js","owner":"thavixt","description":"Online steganographic tool written in Javascript, using Least Significant Bit (LSB) substitution.","archived":false,"fork":false,"pushed_at":"2023-01-03T21:42:30.000Z","size":12682,"stargazers_count":7,"open_issues_count":20,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-04-14T07:09:15.152Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://thavixt.github.io/steganography-js/","language":"TypeScript","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/thavixt.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":"2018-01-13T10:06:21.000Z","updated_at":"2024-02-19T18:37:29.000Z","dependencies_parsed_at":"2022-09-04T07:32:13.305Z","dependency_job_id":null,"html_url":"https://github.com/thavixt/steganography-js","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thavixt%2Fsteganography-js","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thavixt%2Fsteganography-js/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thavixt%2Fsteganography-js/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thavixt%2Fsteganography-js/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thavixt","download_url":"https://codeload.github.com/thavixt/steganography-js/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250479159,"owners_count":21437305,"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":[],"created_at":"2025-01-23T22:49:55.278Z","updated_at":"2025-10-17T04:34:31.298Z","avatar_url":"https://github.com/thavixt.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![gh-pages](https://github.com/thavixt/steganography-js-react/workflows/gh-pages/badge.svg)\n\n# Steganography.js\n\n## Introduction\n\nThe goal of this project was to create an online steganographic tool with Javascript without using existing solutions and frameworks.\n\nI started the project in late 2017 after being inspired by Computerphile's video about steganography:\n* [Secrets Hidden in Images (Steganography) - Computerphile](https://www.youtube.com/watch?v=TWEXCYQKyDc)\n\n## Development\n\nThis is a fairly standard project built with `create-react-app`. No custom scripts, just refer to the ˙package.json` file.\n\nInternationalization is done with [i18next](https://www.i18next.com/). A custom script was written to build the required JSON translation file(s), which you can customize based on your backend/translation service.\n\nTo enable web workers through Webpack, I used the `worker-loader` package (imports prefixed by `!worker-loader`).\n\n## Implementation details\n\nThe project currently uses a custom implementation of LSB steganography.\n\nTODO: further implementation info \u0026 links\n\n## TODOs / idea list\n\n- [x] refactor React components, update dependencies\n- [x] internationalization with i18next\n- [x] use Sass\n- [ ] refactor worker files - in progress\n  - [ ] extact logic from workers with `importScripts` ?\n    - https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope/importScripts\n- [ ] migrate to Typescript\n  - [ ] find a way to compline workers without 'ejecting' the project\n    - independent tsc workflow for the `workers` folder?\n- [ ] new formats\n    - [ ] research audio steganography\n- [ ] separate Electron/Webview app ?\n\n## Further reading - links \u0026 notes\n\nAbout steganography:\n* [Least Significant Bit algorithm for image steganography - International Journal of Advanced Computer Technology (IJACT)](http://ijact.org/volume3issue4/IJ0340004.pdf)\n\nRegarding the development setup:\n* [React](https://reactjs.org/docs/hello-world.html)\n* [Create-react-app](https://github.com/facebookincubator/create-react-app)\n* [React router](https://reacttraining.com/react-router/web/guides/quick-start)\n* [Worker loader - Webpack](https://github.com/webpack-contrib/worker-loader)\n\nUsing Web Workers:\n* [Worker - MDN](https://developer.mozilla.org/en-US/docs/Web/API/Worker)\n* [Worker.postMessage() - MDN](https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage)\n* [Transferable - MDN](https://developer.mozilla.org/en-US/docs/Web/API/Transferable)\n* [ArrayBuffer - MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)\n\nUtilizing the HTML5 Canvas API:\n* [ImageData - MDN](https://developer.mozilla.org/en-US/docs/Web/API/ImageData/ImageData)\n    * Structure of and imgdata (ImageData) object:\n        * *variable                   -\u003e type*\n        * `newImageData`             -\u003e `ImageData`\n        * `newImageData.data`        -\u003e `Uint8ClampedArray` (`TypedArray`)\n        * `nemImageData.data.buffer` -\u003e `ArrayBuffer` (`Transferable` type!)\n* [Uint8ClampedArray - MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray)\n* [CanvasRenderingContext2D.drawImage() - MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/drawImage)\n\nOther:\n* [FileSaver.js - eligrey](https://github.com/eligrey/FileSaver.js/)\n* [image-diff-view - -a-x](https://github.com/a-x-/image-diff-view)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthavixt%2Fsteganography-js","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthavixt%2Fsteganography-js","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthavixt%2Fsteganography-js/lists"}