From 6f23a081b81173d68a7eae6517293125c296ed48 Mon Sep 17 00:00:00 2001 From: devoalda Date: Mon, 22 May 2023 13:33:07 +0800 Subject: [PATCH] Added Text file Steganography, Moved files to individual folders. --- .../encoded_image.png | Bin 285090 -> 285064 bytes image.png => Image_Steg/image.png | Bin img_steg.py => Image_Steg/img_steg.py | 0 Txt_Steg/test.txt | 25 +++ Txt_Steg/txt_steg.py | 150 ++++++++++++++++++ 5 files changed, 175 insertions(+) rename encoded_image.png => Image_Steg/encoded_image.png (93%) rename image.png => Image_Steg/image.png (100%) rename img_steg.py => Image_Steg/img_steg.py (100%) create mode 100644 Txt_Steg/test.txt create mode 100644 Txt_Steg/txt_steg.py diff --git a/encoded_image.png b/Image_Steg/encoded_image.png similarity index 93% rename from encoded_image.png rename to Image_Steg/encoded_image.png index 112f0456d1ce293e693ac8aaa57a4d45464faced..3bea4cf7ce205024dddce5fd610cf4aea36289d9 100644 GIT binary patch literal 285064 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 G{QehVC7x;k diff --git a/image.png b/Image_Steg/image.png similarity index 100% rename from image.png rename to Image_Steg/image.png diff --git a/img_steg.py b/Image_Steg/img_steg.py similarity index 100% rename from img_steg.py rename to Image_Steg/img_steg.py diff --git a/Txt_Steg/test.txt b/Txt_Steg/test.txt new file mode 100644 index 0000000..a4dabcd --- /dev/null +++ b/Txt_Steg/test.txt @@ -0,0 +1,25 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam non ultricies mauris. Aliquam tristi +que dolor ac imperdiet iaculis. Nunc et est nec sapien dapibus sagittis. Suspendisse auctor facilisi +s felis, at lobortis tortor tristique in. Vestibulum consequat lobortis sem, ut efficitur nulla tinc +idunt id. Curabitur nec nisi ac tellus consequat euismod. Sed pulvinar dapibus leo, et convallis ero +s pharetra eu. Mauris eget malesuada neque, non congue ligula. Sed cursus vestibulum massa ac interd +um. Cras in aliquam dui. Morbi maximus metus et est cursus lacinia. Sed in malesuada mauris. Nulla f +acilisi. Nam auctor dolor sit amet turpis aliquam, non lacinia lacus hendrerit. Phasellus in turpis +at risus hendrerit consectetur vel eu ipsum. Sed gravida risus ut tellus iaculis, non rhoncus lorem +vulputate. In tincidunt arcu risus, eu lacinia metus viverra in. Maecenas id ipsum tortor. Nunc vita +e mauris vel turpis lobortis tincidunt sed sit amet purus. Aliquam sed pharetra neque. Sed eget nisi +id metus aliquam dapibus et nec felis. Cras quis ante rutrum, bibendum lacus ut, malesuada justo. Al +iquam consequat mi id turpis cursus bibendum. Ut varius faucibus lorem a egestas. Maecenas commodo l +uctus nunc non euismod. Vestibulum sed dapibus purus. Pellentesque habitant morbi tristique senectus +et netus et malesuada fames ac turpis egestas. Integer tincidunt viverra pharetra. Nam in risus eu l +acus tincidunt laoreet a eu nibh. Donec fringilla iaculis mi. Mauris varius odio id erat interdum, s +ed semper odio ultrices. Aliquam cursus ullamcorper lacus id posuere. Vivamus feugiat arcu ut nulla +elementum vestibulum. Proin interdum enim sed ante venenatis, eget feugiat nisi dapibus. Mauris a vu +lputate arcu, at facilisis quam. Proin ullamcorper velit et enim varius, nec dapibus tortor mollis. +Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Donec eget p +urus tristique, malesuada sem nec, sagittis lectus. Integer sed elit vel ex fringilla accumsan. Nam +sit amet metus ac lacus finibus malesuada id id nisi. Sed condimentum, felis ut faucibus euismod, to +rtor metus hendrerit metus, ut rhoncus metus enim eu velit. Sed blandit consequat est, sit amet rutr +um enim feugiat at. Mauris faucibus blandit diam. Curabitur venenatis efficitur mi, ac tristique nul +la hendrerit a. Nulla facilisi. Nullam sit amet lectus vitae metus venenatis rhoncus. Nunc condiment +um metus at ipsum tincidunt, ac semper orci viverra. Nunc feugiat efficitur ex, sit amet p diff --git a/Txt_Steg/txt_steg.py b/Txt_Steg/txt_steg.py new file mode 100644 index 0000000..0e34cda --- /dev/null +++ b/Txt_Steg/txt_steg.py @@ -0,0 +1,150 @@ +import numpy as np + + +class txt_steg: + def __init__(self, text_file: str = "text.txt", bit_to_hide: int = 2): + """ + Initialize the class + :param text_file: PathName of the text file to encode or decode + :type text_file: str + :param bit_to_hide: Bit to hide the data in (1 - LSB to 8 - MSB) + :type bit_to_hide: int + """ + self.text_file = text_file + self.bit_to_hide = 8 - bit_to_hide + self.delimiter = "abc12345" + + def to_bin(self, data: str) -> str | list[str]: + """ + Convert text file data to binary format as string + :param data: String + :type data: str + :return: Binary Data: String | List[String] + """ + if isinstance(data, str): + return ''.join([format(ord(i), "08b") for i in data]) + elif isinstance(data, bytes) or isinstance(data, np.ndarray): + return [format(i, "08b") for i in data] + elif isinstance(data, int) or isinstance(data, np.unit8): + return format(data, "08b") + else: + raise TypeError("Type not supported") + + def from_bin(self, data: str) -> str: + """ + Convert binary `data` back to the original format + :param data: String + :type data: str + :return: Original Data: String + """ + binary_data = ''.join([c for c in data if c in ('0', '1')]) # Remove non-binary characters + + # Split the binary data into chunks of 8 bits + binary_parts = [binary_data[i:i + 8] for i in range(0, len(binary_data), 8)] + + # Convert each chunk to its corresponding ASCII character + decoded_data = ''.join([chr(int(part, 2)) for part in binary_parts]) + + return decoded_data + + def encode(self, secret_data: str = "Hello World"): + """ + Encode the secret data into the text file + :param secret_data: String + :type secret_data: str + """ + print("[+] Encoding...") + # Read text file and covert to binary + if self.text_file != "": + with open(self.text_file, "r") as f: + data = f.read() + f.close() + data = self.to_bin(data) + else: + raise FileNotFoundError("File not found") + + bits_to_hide = self.bit_to_hide + + secret_data += self.delimiter # Add delimiter + binary_secret_data = self.to_bin(secret_data) + data_len = len(data) + + # Check if secret data can be encoded into text file + if len(binary_secret_data) > data_len: + raise ValueError(f"[-] Error: Binary Secret data length {len(binary_secret_data)} " + f"is greater than data length {data_len}") + + encoded_data = "" + + # For every 8 bits in the data, hide 1 bit of secret data in the bit_to_hide position + data_index = 0 + for i in range(0, data_len, 8): + data_byte = data[i:i + 8] + if data_index < len(binary_secret_data): + secret_bit = binary_secret_data[data_index] + modified_byte = data_byte[:bits_to_hide] + secret_bit + data_byte[bits_to_hide + 1:] + encoded_data += modified_byte + data_index += 1 + else: + encoded_data += data_byte + + encoded_data = self.from_bin(encoded_data) + + return encoded_data + + def decode(self) -> str: + """ + Decode the encoded data from the text file + :return: Decoded Data: String + """ + print("[+] Decoding...") + # Read text file and covert to binary + if self.text_file != "": + with open(self.text_file, "r") as f: + data = f.read() + f.close() + data = self.to_bin(data) + else: + raise FileNotFoundError("File not found") + + # Split the data into bytes + bytes_data = [data[i:i + 8] for i in range(0, len(data), 8)] + + # Extract the bits at the bit_to_hide position + secret_data = [byte[self.bit_to_hide] for byte in bytes_data] + + # Concatenate the bits into a binary string + binary_data = ''.join(secret_data) + + # Split the binary data using the delimiter + delimeter_as_bin = self.to_bin(self.delimiter) + binary_data = binary_data.split(delimeter_as_bin)[0] + + # Convert the binary data back to the original text + decoded_data = self.from_bin(binary_data) + + return decoded_data + + +def main(): + print("Welcome to Text Steganography") + print("1. Encode\n2. Decode\n3. Exit") + choice = int(input("Enter your choice: ")) + if choice == 1: + text_file_name = input("Enter name of text file to encode: ") + secret_data = input("Enter data to encode: ") + bit_to_hide = int(input("Enter bit to hide (1 - LSB to 8 - MSB): ")) + encoded_data = txt_steg(text_file_name, bit_to_hide).encode(secret_data) + extension = text_file_name.split(".")[-1] + with open(f"encoded_text.{extension}", "w") as f: + f.write(encoded_data) + print("Encoded Data:", encoded_data) + elif choice == 2: + text_file_name = input("Enter name of text file to decode: ") + bit_to_hide = int(input("Enter bit to hide (1 - LSB to 8 - MSB): ")) + decoded_data = txt_steg(text_file_name, bit_to_hide).decode() + print("Decoded Data:", decoded_data) + + +if __name__ == "__main__": + main()