Flutter plugin for fully transparent hiding any file within an image using stegify API. This technique is known as LSB (Least Significant Bit) steganography


Original FileEncoded FileEncoded File

The Result file contains the Data file hidden in it. And as you can see it is fully transparent.


flutter-stegify plugin offers an easy to use Dart functions for steganography encodin/decoding. The original implementation is in Go and can be found here: stegify

This plugin uses go-mobile for generating platform native bindings and exposes Dart functions which can be used directly in your flutter mobile application!


Since flutter-stegify is exposing Go implementation through flutter plugin some Go dependencies are required:

  • Go is installed
  • go-mobile is installed
  • stegify sources are present in your GOPATH, in order to pull stegify execute go get -u

NOTE: stegify does not rely on any external dependencies, therefore it is not a module. This means that go mod support should be explicity disabled by an environment variable: export GO111MODULE=off

Importing in your flutter application

In order to import this plugin correctly you need to add the following lines to your settings.gradle:

In the beginning add: include ':steg'

In the end of the file add: project(':steg').projectDir = new File(project(':flutter_stegify').projectDir, 'steg')

Example usage of the plugin can be found here.


void encode(String carrierFileName, String dataFileName, String resultFileName) async
void decode(String carrierFileName, String resultFileName) async

encode performs steganography encoding of data file in carrier file and saves the steganography encoded product in new file.

decode performs steganography decoding of data previously encoded by the Encode function. The data is decoded from file carrier and it is saved in separate new file

NOTE: The result file won't have any file extension and therefore it should be specified explicitly in the resultFileName argument.


If carrier file is in jpeg or jpg format, after encoding the result file image will be png encoded (therefore it may be bigger in size) despite of file extension inherited from the original carrier file (which is .jpeg or .jpg).