As you know, I am interested in different data hiding methods, including cryptography and steganography. Earlier I implemented AES encryption tool and framework, and simple steganography Python app.
Now, while I am looking for an application, I am continue improving my knowledge and skills. Data hiding solutions always are interesting from algorithmic point of view. So in educational purposes I developed simple steganography and ciphering tool named StG.

This tool able to encrypt data with AES and embed it into .png files, utilizing common and advanced technology for steganography, including +/- 1 LSB embedding, adaptive embedding and randomization.
In simple words
This app allows to hide data into .png image and then extract it from there utilizing method names steganography.
Principle of this method is in mixing of data-to-hide with data of picture utilizing smart math. Imagine you adding a salt to a water. It dissolves and become invisible, but it is still there. And you can extract it, if you, for example, evaporate water. This is what steganography does with data.
If you salted your water properly (i.e., not too hard), it’s very difficult to determine (by eye) that it contains something else. Even more difficult to detect the presence of salt if you are adding it not to a pure water, but to a rich soup with vegetables, meat, spices and so on. Same way steganography hides the data in carrier. If amount of data to hide is not too big, it’s extremely difficult to detect that an image carries something else.
Modern special steganalysis systems are able to detect probability of presence of hidden data in an image. Same way we can say «Salty!» if we try the soup. But we can not say why it’s salty (because of salt or, for example, because of soy sauce).
To reduce possibility of such detection, StG app uses advanced methods of steganography. In a nutshell, the app analyzes carrier picture, determines zones where data hiding will be less visible, and hides data only there. Additionally, during hiding the app shuffles data in pseudo-random way, making it looks like a noise. Developing analogy with a soup, we each time inventing flavouring additive, perfectly matching natural taste of this specific soup.
Beside this StG provides additional level of protection. Before embedding, it encrypts data with AES encryption system (most advanced encryption standard in the world). This way, even if the attacker will detect the presence of steganographed data, he will not be able to decrypt it — without a password it is just a random noise. There is no methods to decipher AES.
StG steganography framework
Of course, as an experienced programmer, I published not only app itself, but also C++-based steganography framework implementing functional of an app. It contains:
- StGLib — C++ steganography core
- StGBridge — C++ / CLR library, allows to use StGLib from C#
- StGABI — C ABI allows to use StGLib functions from any managed programming language (Java, Go, Rust, Python, TrueScript via Node.js, etc., you name it).
You can obtain this framework from StG GitHub repo. There you also can find detailed explanation of project deployment and examples of usage of code. Feel free to use StG framework in your projects.
Further plans
Development of stegano- and cryptography apps is interesting for me, so I want to continue my studies in this area. Now my development roadmap looks like:
- Improve base functional:
- Reduce distributive size
- Stego density control
- Consume different image formats as carrier
- Clean up the code base & set up proper CI/CD configuration
- Mobile OS versions
- Android version
- iOS version (donations for MacBook & iPhone required!)
- Stego-messenger — distributed, secured, free messenger for all main platforms (?)
- Advanced stego algorithms (ISGANs, DCT, DWT, RDH) (?)
Support & donations
If you like this software, please, support me with donations. This will allow me to spend more time on improvement of my projects. Any help will count.
VISA card (Halyk bank, Worldwide): 4003 0351 5709 6871
МИР card (T-bank, Russia only): 2200 7021 5287 4603
Recepient: Daniil Galakhov
