We are experimenting with more community authored Challenges, if you are interested in writing your own challenge, please head to the sandbox and post your idea there. This challenge was written by André.
The Author: André is an expert in medical image processing, doing research and development in Python and C++, and also teaches digital image processing at the university level. These days André mainly uses Stack Overflow as a knowledge source, and sometimes to challenge himself with interesting image processing questions. In addition to authoring this new challenge, André has successfully completed 5 previous coding challenges so far.
Background
Steganography is the art of hiding information within other data. One common approach is hiding messages in images by manipulating pixels without perceivable change.
Digital images are made up of pixels, and each pixel contains color information. In most common formats (PNG, BMP), each pixel is represented using the RGB color model, where:
- R = Red intensity (0–255)
- G = Green intensity (0–255)
- B = Blue intensity (0–255)
Each color component is stored as 8 bits, meaning one pixel typically occupies 24 bits:
Pixel: [R, G, B] → [8 bits R][8 bits G][8 bits B]
For example, a pixel with R=200, G=150, B=75 would be stored in binary as:
R: 11001000
G: 10010110
B: 01001011
The least significant bit (LSB) of each color channel can be modified to hide data without significantly changing the pixel's appearance.
- For example, if you want to hide a
1in the red channel LSB of the above pixel:
Original R: 11001000 → New R: 11001001
Or, for another example, if we wanted to hide the secret message 'hi' using this method we would need 16 bits which would use ~6 pixels. The letter ‘h' in binary is 01101000, and 'i' is 01101001, therefore the LSB of the 3 color channels across the six pixels would match these letters’ binary value. Since this message only uses 16 bits, and 6 pixels gives us 18 bits to work with, the last two color channels will remain unused.
Rules
- Please include your code as well as well as the answers to the two questions listed under "Tasks for this Challenge." As short description of your approach is also encouraged.
- Your entry is not permitted to be written by AI.
- For any feedback on this Challenge, please head over to the feedback post on Meta.
- The challenge deadline is May 13, 2026.
- Have fun and thanks for participating!
Tasks for this Challenge
Decode the following images one by one. You will find hints for subsequent decoding as you go. Fully solving the two parts of the story will reveal a complete sentence. In order for us to grade your submission, please answer:
- What is the hidden quote?
- Which object is on the line? Note, there are two possible correct answers here.
Task 0: Test your decoder
The three stamp-size images provided all contain the same encoded message. The first image appears black, but it isn't. The second image boosts the contrast in order to show the hidden content. The third image is an example of a natural image with the hidden message embedded.
Skipping the first 2+16 bits (the header format is explained later) and converting the subsequent groups of 8bit, respectively, into an ASCII characters, should give you "Test Test Test...".
For reference:
- 01000001 binary → 65 decimal → 'A' ASCII.
- 01100001 binary → 97 decimal → 'a' ASCII.
- etc.
Task 1: Decode a simple text message
An ASCII text message is hidden in the least significant bits of the cat image, the encoding scheme is:
- Simple LSB Encoding
- Header:
[0, 0] - Next 16 bits: message length in bits
- Followed by the message itself, ASCII characters encoded by groups of 8bit, most-significant bit (MSB) first






Solution
The hidden quote is "Three may keep a secret, if two of them are dead", Benjamin Franklin
What is on the line?
Code
My Python code is available on github at https://github.com/genevieve-le-houx/SO_challenge_18_hidden_in_plain_sight
My approach is fairly simple, I developped my decoder for the first task, got the hint for the second task and developped the second decoder.
That was a fun challenge!