How to send secret messages hidden in pictures and songs

Disguise your files.

In this era of communication, we can beam video streams, emails, and files around the planet in seconds. Although this makes sharing information brilliantly convenient, you can never feel entirely confident about what happens to the 1s and 0s going into the digital ether.

If you want to make sure that only your contact, and nobody else, sees the data you’re sending, you need to hide it inside another file. This is actually pretty simple to do. Here’s how to conceal sensitive information in a more innocuous guise.

Encryption versus hiding files

When it comes to protecting your private information, many experts advise that you encrypt your files. In this approach to securely sending data, a secure messaging app like Signal or WhatsApp will do the heavy lifting for you, scrambling the contents of your messages so nobody except the intended recipient can read them. If somebody else tries to intercept the encrypted communication—this could be anyone from a hacker spying on your coffee shop’s free Wi-Fi connection to an internet service provider viewing your activity—they will see only a meaningless mix of code. It’s very difficult to get those messages into a readable form.

But encryption isn’t foolproof. If somebody learns your email or messaging-app password, or gains access to your unlocked phone or computer, then they can view your encrypted files as if they were the original recipient. That’s why you might want to add another layer of security: hiding private files inside other files.

How it works

So what actually happens when you hide one file within another? Essentially, you’re adding the code for the first piece of information—its actual 1s and 0s—to the second file, which can be an image, audio clip, or anything else. The change happens in a way that doesn’t affect the carrier’s contents (although this does increase its size), which means you can still open the envelope file and use it as normal.

This lets the carrier file hide in plain sight. If someone should gain access to your machine and encounter a folder of photos, they can view the pictures without ever knowing that the images contain other files within them. (Of course, in an perfect world, this person wouldn’t get into your computer in the first place. We’d advise you to use the hidden-file security method in combination with other measures, like choosing a secure password for your Windows or macOS account.)

When you’re ready to send your hidden file to a friend, they will require some advance notice: You need to tell the recipient of the newly-packaged data that you’re hiding one chunk of digital information inside another. Ideally, you’ll explain this through one mode of communication, and send the file itself via a different route. For example, you might tell your contact what they need to know through a phone call or face-to-face meeting, and then beam the file through a messaging app.

Easy programs

Now that you know how this technique works, you need some software to help with the task. You can take a few different routes to hide files, but all the tools we’ll talk about work similarly. And to use them, you don’t need to be a coding mastermind—or have any technical know-how.

For Windows users, QuickStego is one free solution. It puts any text file inside a bitmap image (BMP) file. First, both you and the file recipient need to install QuickStego. Then, use the Open Image and Open Text buttons to combine your image and text. When you attempt to open the resulting file in any other program, it will appear as a normal bitmap picture, but when you open it with QuickStego, you’ll see both image and text.

Another Windows-only program is DeepSound, which hides most common file types, including PDFs and images, inside audio files. The song still plays in a regular audio program, but when the recipient opens it in DeepSound, they can extract the concealed information. The interface is simple too: Just click Open carrier files to choose your audio container and Add secret files to pick the files you want to hide.

Typed commands

If you don’t want to rely on either of these programs—or you’re on a macOS machine, which doesn’t have as many decent software options—you can hide files through typed orders. On Windows, you do this through the command prompt, and on macOS, you open a Terminal window. Either way, this process won’t feel particularly demanding or technical, although you will need to do some careful typing.

In Windows, you can only hide text files inside images. Put your soon-to-be-hidden file (let’s call it “secret.txt”) and your container file (“picture.jpg”) into the same folder, and then open this folder in File Explorer. Click the address bar, which shows the path to the folder, type “cmd,” and hit Enter. A command-prompt window will appear. Inside it, type “copy /b secret.txt + picture.jpg hidden.jpg” and then hit Enter. (Of course, instead of “secret.txt” you’ll use the file name of the text you want to hide, and you should replace “picture.jpg” with the file name of the image you want as a container. Instead of “hidden.jpg” you can use whatever name you’d like to give the new file you plan to create. And don’t forget the two spaces before the final file name.) The newly-created file opens as a normal picture in an image editor, but if you open it in Notepad or another text editor, you can see the hidden text on display at the top of the page.

Over on macOS, you can pack a single text file or a zip file (an archive full of files of any type) into an image. First, move the files in question to the desktop. Again, we’re calling the container image “picture.jpg and the hidden file “secret.txt,” although in this case, it could just as easily be “” Then launch the Terminal app (open Spotlight with Cmd+Space, type “terminal,” and select the correct app when it appears). In Terminal, type “cd desktop” and hit Enter to switch to the desktop. Next, type “cat picture.jpg secret.txt > hidden.jpg” and hit Enter. As on Windows, we’re calling the finished image “hidden.jpg,” but you can change the file name to whatever you’d like. When you open it in any image editing program, it will appear to be a normal picture; when you open it in an app like TextEdit, the hidden text will appear at the end. If you’ve hidden an archive, you retrieve the hidden files slightly differently: Go back to the Terminal, type “unzip hidden.jpg” (or whatever file name you chose), and hit Enter. The hidden files will then spill out onto the desktop once more.

David Nield

David Nieldis a tech journalist from the UK who has been writing about gadgets and apps since way before the iPhone and Twitter were invented. When he's not busy doing that, he usually takes breaks from all things tech with long walks in the countryside.