mp3 steganography library
Project description
MP3-Steganography
Contributes
-
Aviad Seady (aviadevelops@gmail.com)
-
Tomer Shay (tomershay100@gmail.com)
-
Lee Zaid (lizizaid@gmail.com)
This is a steganography library in python for hiding strings in mp3 files.
General
Background
This python library allows the user to hide strings inside MP3
files, extract the hidden strings from MP3
file,
clean a MP3
file from hidden strings in it and generally allows to convert MP3
files to WAV
(decoding
process) files and vice versa (encoding process).
Project Description
The steganography process uses and modifies huffman tables as presented in the research article "_High capacity
reversible data hiding in MP3 based on Huffman table
transformation_" (which can be found here). Quite
simply, the idea is to be able to hide bits by changing the huffman tables. Each frame in the MP3
file uses several
huffman tables (one per granule, channel and regin - a total of 8-12 tables).
Unofficially, they found pairs of tables, according to their similarities and determined that each would be for the bit
0 or the bit 1. For the sake of demonstration let us assume that the huffman table x and the huffman y table are a pair,
and that x is for the bit 0 and y for the bit 1. Now to hide a bit, given that the huffman table x has been used, it
must be replaced with the huffman table y if the bit is 1 or to keep the huffman table x if the bit is 0. An inverted
case will happen for original use of table y. Thus, all 30 huffman tables that use (out of 32) MP3
files, are
divided into pairs and each time you see a huffman table z - replace it with the huffman table that matches the next bit
you want to hide.
Project Structure
The library is contains several packages and several classes built as follows:
-
decoder
package:-
Frame class: contains all the information about the current
MP3
frame that been decoded. -
FrameHeader class: contains all the information about the current
MP3
frame header that been decoded. -
FrameSideInformation class: contains all the information about the current
MP3
frame side-information thatbeen decoded.
-
MP3Parser class: performs the actual decoding process while going through all the frames of the file.
-
ID3Parser class: performs the decoding process on the
METADATA
of the ``MP3``` file. -
tables file: contains all the tables that been used in the decoding process.
-
util file: contains all the different functions and dataclasses that other classes use frequently like
mathematical calculations and bit conversions.
-
Decoder class: consolidates the
MP3
decoding process. Receives paths to files and takescare of the decoding process while printing information, creating files and analyzing the
METADATA
.
-
-
encoder
package:-
WAVReader class: contains all the information about the
WAV
file that been encoded. -
MP3Encoder class: performs the actual encoding process.
-
ID3Parser class: performs the decoding process on the
METADATA
of the ``MP3``` file. -
tables file: contains all the tables that been used in the encoding process.
-
util file: contains all the different functions and dataclasses that other classes use frequently like
mathematical calculations and bit conversions.
-
Encoder class: consolidates the
MP3
encoding process. Receives paths to files and takescare of the encoding process while printing information, creating files.
-
-
Steganography class: serves as a kind of Façade and allow the user to perform operations on his
MP3
and
WAV
files. The possible actions are:-
decode
MP3
file toWAV
file. -
encode
WAV
file toMP3
file. -
hide string in
MP3
file. -
reveal string in
MP3
file. -
clean
MP3
file from any string.
-
You can see more information about the class hierarchy
in UML.
Dependencies
you can also see in requirements.txt
file
Running Instructions
Steganography Class API:
-
Creating Steganography object by
from mp3stego import Steganography stego = Steganography(quiet=True)
quiet: bool
: boolean value for the function to print information or not (default valueTrue
).
-
for encoding
WAV
file intoMP3
file you may usestego = Steganography(quiet=True) stego.encode_wav_to_mp3("input.wav", "output.mp3", 320)
-
wav_file_path: str
: file path for theWAV
file. -
output_file_path: str
: file path for the outputMP3
file. -
bitrate: int
: the bitrate to be used in the encoding process (default value is320
). You may use bitratefrom
32Kb
to420Kb
in jumps of32Kb
.
-
-
For decoding
MP3
file intoWAV
file you may usestego = Steganography(quiet=True) stego.decode_mp3_to_wav("input.mp3", "output.wav")
-
input_file_path: str
: file path for theMP3
file. -
wav_file_path: str
: file path for the outputWAV
file (default value=input_file_path[:-4] + ".wav"
).
-
-
For hiding string in
MP3
file you may usestego = Steganography(quiet=True) stego.hide_message("input.mp3", "output.mp3", "String to hide in the file")
-
input_file_path: str
: file path for the inputMP3
file. -
output_file_path: str
: file path for the outputMP3
file. -
message: str
: the message to hide in the file. -
wav_file_path: str
: file path for the outputWAV
file (default value=input_file_path[:-4] + ".wav"
). -
delete_wav: bool
: boolean value for the decoding process to delete the wav file or not (defaultvalue
True
).
-
-
For revealing string from
MP3
file you may usestego = Steganography(quiet=True) stego.reveal_massage("input.mp3", "results.txt")
-
input_file_path: str
: file path for the inputMP3
file. -
txt_file_path: str
: file path for the results to be written to.
-
-
For cleaning
MP3
file you may usestego = Steganography(quiet=True) stego.clear_file("input.mp3", "output.mp3")
-
input_file_path: str
: file path for the inputMP3
file. -
output_file_path: str
: file path for the outputMP3
file.
-
Installation
Install the library using:
pip install mp3stego-lib
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file mp3stego-lib-1.1.2.tar.gz
.
File metadata
- Download URL: mp3stego-lib-1.1.2.tar.gz
- Upload date:
- Size: 52.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.9.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b3dae82d38af73c5118079d75d5d7b549c8e7b28c4c9b026e4262186a1b948ba |
|
MD5 | de4e9ee98dd7e243556540a1a87dab9e |
|
BLAKE2b-256 | 189f0df68f5d600bdfb1201f98b404f918a726ca808d61cdfb9e244a91a57bb2 |
Provenance
File details
Details for the file mp3stego_lib-1.1.2-py3-none-any.whl
.
File metadata
- Download URL: mp3stego_lib-1.1.2-py3-none-any.whl
- Upload date:
- Size: 53.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.9.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fdb0f91c2cf9c86cd6115c9dc17e5add77d095afd1e306cf2527a17a93099e32 |
|
MD5 | 77a3651aadc40afbe569fe48cc0ad6f5 |
|
BLAKE2b-256 | 49cbb350bd1f69f515f52f5fc44a4011af822296d432af11f7ee4832c169a39b |