diff --git a/Image_Steg/img_steg.py b/Image_Steg/img_steg.py index 4c14e44..a292010 100644 --- a/Image_Steg/img_steg.py +++ b/Image_Steg/img_steg.py @@ -3,7 +3,7 @@ import numpy as np class img_steg: - def __init__(self, image_name: str = "image.png", bit_to_hide: list[int] = None): + def __init__(self, image_name: str = "image.png", bit_to_hide: list[int] = None) -> None: """ Initialize the class :param image_name: Name of the image to encode or decode @@ -12,8 +12,8 @@ class img_steg: :type bit_to_hide: list[int] """ self.image_name = image_name - self.bit_to_hide = [8 - bit_pos for bit_pos in bit_to_hide] - self.delimiter = "=====" + self.bit_to_hide = [8 - bit_pos for bit_pos in bit_to_hide] if bit_to_hide else [1] # Default is LSB + self.delimiter = "abc-123-a==" def encode(self, secret_data: str = "Hello World") -> np.ndarray: """ @@ -36,6 +36,10 @@ class img_steg: data_index = 0 binary_secret_data = self.to_bin(secret_data) # Convert data to binary data_len = len(binary_secret_data) # size of data to hide + + print(f"[+] Size of data to hide: {data_len}") + print("[+] Starting encoding...") + for row in image: for pixel in row: r, g, b = self.to_bin(pixel) # Convert RGB Values to binary format @@ -60,13 +64,15 @@ class img_steg: data_index += 1 if data_index >= data_len: break - pixel[0] = int(''.join(r), 2) # convert modified binary back to integer for red pixel pixel[1] = int(''.join(g), 2) # convert modified binary back to integer for green pixel pixel[2] = int(''.join(b), 2) # convert modified binary back to integer for blue pixel if data_index >= data_len: break + + print(f"[+] Encoding completed") + return image def decode(self) -> str: @@ -79,6 +85,8 @@ class img_steg: image = cv2.imread(self.image_name) # read image binary_data = "" bit_to_hide = self.bit_to_hide + + print(f"[+] Extracting data from image...") for row in image: for pixel in row: r, g, b = self.to_bin(pixel) @@ -87,6 +95,9 @@ class img_steg: binary_data += g[bit_pos] # retrieve data from specified bit position of green pixel binary_data += b[bit_pos] # retrieve data from specified bit position of blue pixel + print(f"[+] Forming binary data completed") + print(f"[+] Decoding binary data...") + # Split by 8 bits all_bytes = [binary_data[i: i + 8] for i in range(0, len(binary_data), 8)] # Convert from bits to characters @@ -96,6 +107,7 @@ class img_steg: if decoded_data[-len(self.delimiter):] == self.delimiter: break + print(f"[+] Decoding completed") return decoded_data[:-len(self.delimiter)] def to_bin(self, data: str) -> str | list[str]: @@ -134,11 +146,12 @@ def main(): image_name = "pokemon.png" encoded_image_name = "encoded_image.png" secret_data = "" - with open("../Txt_Steg/test.txt", "r") as f: + with open("../Txt_Steg/secret_data.txt", "r") as f: secret_data = f.read() # Generate random bit positions to hide data into image for testing bit_to_hide = np.random.choice(range(1, 9), np.random.randint(1, 9), replace=False) + # bit_to_hide = [1, 2] bit_to_hide = list(bit_to_hide) bit_to_hide.sort() print(f"Bits to hide: {bit_to_hide}") @@ -147,9 +160,7 @@ def main(): # Encode the data into the image encoded_image = img_steg(image_name=image_name, bit_to_hide=bit_to_hide).encode(secret_data) - extension = image_name.split(".")[-1] - cv2.imwrite("encoded_image." + extension, encoded_image) - print("Image Encoded Successfully") + cv2.imwrite(encoded_image_name, encoded_image) # Decode the data from the image decoded_data = img_steg(image_name=encoded_image_name, bit_to_hide=bit_to_hide).decode() diff --git a/Txt_Steg/secret_data.txt b/Txt_Steg/secret_data.txt new file mode 100644 index 0000000..2725d85 --- /dev/null +++ b/Txt_Steg/secret_data.txt @@ -0,0 +1,76 @@ +Secret Data + +We're no strangers to love +You know the rules and so do I +A full commitment's what I'm thinking of +You wouldn't get this from any other guy + +I just wanna tell you how I'm feeling +Gotta make you understand + +Never gonna give you up +Never gonna let you down +Never gonna run around and desert you +Never gonna make you cry +Never gonna say goodbye +Never gonna tell a lie and hurt you + +We've known each other for so long +Your heart's been aching, but +You're too shy to say it +Inside, we both know what's been going on +We know the game and we're gonna play it + +And if you ask me how I'm feeling +Don't tell me you're too blind to see + +Never gonna give you up +Never gonna let you down +Never gonna run around and desert you +Never gonna make you cry +Never gonna say goodbye +Never gonna tell a lie and hurt you + +Never gonna give you up +Never gonna let you down +Never gonna run around and desert you +Never gonna make you cry +Never gonna say goodbye +Never gonna tell a lie and hurt you + +(Ooh, give you up) +(Ooh, give you up) +Never gonna give, never gonna give +(Give you up) +Never gonna give, never gonna give +(Give you up) + +We've known each other for so long +Your heart's been aching, but +You're too shy to say it +Inside, we both know what's been going on +We know the game and we're gonna play it + +I just wanna tell you how I'm feeling +Gotta make you understand + +Never gonna give you up +Never gonna let you down +Never gonna run around and desert you +Never gonna make you cry +Never gonna say goodbye +Never gonna tell a lie and hurt you + +Never gonna give you up +Never gonna let you down +Never gonna run around and desert you +Never gonna make you cry +Never gonna say goodbye +Never gonna tell a lie and hurt you + +Never gonna give you up +Never gonna let you down +Never gonna run around and desert you +Never gonna make you cry +Never gonna say goodbye +Never gonna tell a lie and hurt you \ No newline at end of file diff --git a/Txt_Steg/test.txt b/Txt_Steg/test.txt index a4dabcd..64e7536 100644 --- a/Txt_Steg/test.txt +++ b/Txt_Steg/test.txt @@ -1,25 +1,61 @@ -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 + + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in magna sit amet arcu pharetra egestas. Proin convallis pretium massa, in vulputate massa elementum at. Donec consequat fermentum metus, vel fringilla elit faucibus ac. Nam ut ipsum dui. Vestibulum vestibulum malesuada nulla, nec varius dui volutpat in. Donec id neque non dolor gravida scelerisque a ullamcorper odio. Sed sed diam sodales, blandit leo in, interdum lectus. Nam eget mi tortor. Pellentesque in diam sed leo convallis euismod. Mauris fringilla suscipit elementum. Donec condimentum neque non vestibulum volutpat. Duis sed ante dolor. Sed maximus nunc ornare, consequat sem ac, iaculis risus. + +Vivamus egestas, arcu in vehicula tempor, magna est condimentum erat, sed egestas erat tortor ut lorem. Suspendisse posuere sollicitudin scelerisque. Donec sodales, nisl nec tristique tristique, arcu lorem porta risus, a sagittis est dui eu nunc. Maecenas placerat iaculis arcu, sit amet posuere odio interdum non. Nulla viverra ipsum erat, vitae faucibus neque auctor eu. Donec sodales efficitur justo eget fermentum. Suspendisse hendrerit ornare sem. Maecenas placerat quis leo quis aliquet. Pellentesque consectetur varius vulputate. In ac sem vel lectus interdum iaculis. + +Etiam fringilla nisi vel magna mollis, vitae facilisis lectus commodo. Fusce eget rhoncus metus, ut pellentesque turpis. Morbi vel ex sit amet est pretium dignissim quis nec tellus. Cras porta ultricies neque a laoreet. Donec sodales id felis et convallis. Donec ut aliquet dolor. Proin maximus rhoncus lorem finibus vulputate. Integer ut magna vitae tellus auctor consequat ac non libero. Donec id massa imperdiet, euismod nulla ut, cursus magna. Aliquam accumsan magna sed urna consequat rutrum non vel nibh. Nulla quis lectus eu elit semper convallis at id risus. Sed magna urna, lacinia ut elit sed, vestibulum laoreet ligula. Nulla vestibulum nulla ex, sit amet pellentesque metus viverra sagittis. Ut placerat lorem id risus semper tempus. Praesent velit lacus, molestie vel magna ut, pretium varius nisi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + +Cras dapibus, eros vitae lobortis tempus, nunc massa molestie diam, vel faucibus magna quam at tortor. Donec quis ipsum et mi convallis ornare porta vel libero. Vestibulum porttitor nibh vel suscipit blandit. Nullam condimentum varius placerat. Curabitur dapibus urna ullamcorper quam posuere iaculis. Proin faucibus tortor a lectus commodo, eleifend finibus leo sollicitudin. Cras lobortis porttitor nulla a faucibus. Nunc et lorem sed dui sagittis ultricies. Donec lacus nisi, dictum egestas laoreet facilisis, bibendum faucibus ipsum. Mauris nisl magna, auctor nec ante non, efficitur accumsan lorem. Pellentesque sed ipsum vel nisl aliquam volutpat a ut velit. Curabitur magna ex, blandit ultricies consequat vel, consequat ut odio. Cras vitae luctus leo. + +Nullam arcu orci, ultricies vel elementum at, fringilla vitae enim. Nam egestas, magna sed lacinia pharetra, lacus dui imperdiet justo, nec suscipit ante tortor nec sapien. Pellentesque dapibus gravida arcu, fringilla porta turpis vestibulum eget. Phasellus ornare eget turpis at tempus. Nulla condimentum tincidunt aliquam. Ut in purus consequat massa rhoncus lobortis vitae ut lectus. Morbi lorem lacus, ullamcorper sit amet lorem at, pretium varius turpis. Ut malesuada odio vitae quam congue lobortis. Aliquam fermentum tristique facilisis. Donec a nulla consectetur nibh semper euismod in id massa. Nam nec mi mauris. Donec ligula sem, vestibulum eget neque et, egestas mollis sem. Sed dictum, enim sollicitudin ultrices vestibulum, nulla ligula commodo ipsum, eget imperdiet sem leo vel nunc. Cras vel tempus risus. + +Maecenas urna purus, pharetra a diam at, porttitor tempor leo. Nulla quis aliquam augue. Fusce et mauris eu turpis iaculis suscipit et luctus velit. Mauris euismod nisl sed ex rutrum, mattis interdum metus sollicitudin. Suspendisse vel nunc vulputate arcu posuere tincidunt. Pellentesque luctus imperdiet dui ac sollicitudin. Vivamus id erat augue. Vivamus id condimentum metus. Aenean egestas sem et mi pretium, vitae efficitur massa placerat. Maecenas id erat quam. + +Nam est metus, dictum vel molestie tristique, viverra pellentesque velit. Aenean vitae interdum nibh. Nullam nec turpis euismod, pharetra lorem sit amet, lobortis dolor. Donec pharetra fermentum justo ut hendrerit. Nulla quis dui eros. Donec sagittis posuere sapien, vel auctor augue placerat vel. Proin eget dui nec risus laoreet molestie vitae ac elit. In tincidunt tempus odio lacinia commodo. Phasellus et tortor condimentum, interdum massa at, rhoncus felis. Mauris lacinia at ante quis facilisis. Etiam porttitor sem augue, sit amet malesuada nibh suscipit gravida. Maecenas elementum sagittis leo id dignissim. Mauris ut efficitur quam. Proin et iaculis justo. Ut eleifend justo metus, vitae feugiat erat viverra sed. Maecenas porttitor vitae eros at varius. + +Nullam ac dolor auctor, rhoncus augue quis, ultrices metus. Integer sollicitudin ex lorem, sit amet fringilla elit dapibus quis. Integer sed mauris eros. Vestibulum interdum quam augue, et congue tortor rhoncus at. Duis consequat pharetra rutrum. Donec vulputate lorem tempor placerat facilisis. Nam blandit felis a ipsum condimentum placerat. Proin quis erat a lectus tempus maximus. Fusce ac augue vitae elit vehicula pretium. Cras ullamcorper, nulla a placerat interdum, orci nunc scelerisque justo, eu lobortis est sem eu leo. + +Phasellus condimentum metus augue, a convallis augue placerat sed. Phasellus sollicitudin interdum nulla, in gravida eros condimentum id. Quisque lorem ligula, suscipit nec eros vel, pretium ultricies turpis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque ultrices mi ac fringilla elementum. Morbi nec velit augue. Fusce vitae ex fermentum, aliquam dolor a, rhoncus enim. Maecenas lectus tortor, feugiat ac tincidunt in, blandit non sapien. Fusce dapibus erat ac tellus semper, in ultricies arcu tempor. Nam feugiat, velit id egestas semper, magna eros elementum augue, eget placerat eros quam quis urna. Sed in neque sodales, consectetur arcu semper, condimentum magna. Nam eleifend justo eu iaculis tempus. + +In hac habitasse platea dictumst. Curabitur facilisis ornare arcu id tempor. Nullam ullamcorper tincidunt urna a laoreet. Quisque congue nibh quis sagittis maximus. Phasellus tempor lectus dui, non vestibulum magna consequat quis. Etiam augue eros, molestie at sapien in, commodo laoreet eros. Maecenas vestibulum ipsum enim, ac malesuada quam porta sit amet. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + +Proin consectetur commodo arcu, id volutpat enim tincidunt non. Praesent risus ex, euismod id rhoncus ut, efficitur vitae sem. Vivamus viverra, quam in suscipit vehicula, augue nibh vestibulum quam, et porta mauris urna a eros. Phasellus suscipit id velit quis tincidunt. Morbi diam tellus, fermentum vel sapien ut, ornare convallis urna. Duis venenatis, libero finibus dapibus tempor, metus dui tincidunt arcu, a imperdiet massa lectus tempus orci. Sed feugiat ipsum sit amet diam condimentum congue. Etiam ut erat quis quam sollicitudin aliquam et et orci. Sed nec nisi sodales, laoreet risus vulputate, eleifend sem. Nam placerat, leo nec volutpat dapibus, mi nisi commodo est, nec mattis lacus neque id lorem. Sed justo risus, consequat a augue vitae, placerat egestas ex. Morbi ornare, mauris ut facilisis venenatis, sapien urna fermentum eros, a dictum lectus massa quis diam. Cras elementum accumsan nisi, sed scelerisque diam varius in. Nam vitae cursus enim. Morbi ullamcorper neque eget odio tristique, quis sagittis turpis volutpat. Fusce facilisis, velit volutpat sodales ultricies, justo nulla gravida massa, a ultrices elit ex vel libero. + +Sed sed dolor quis lacus bibendum dignissim et vitae nulla. Aenean nec mattis mi. Nam a orci nec sapien pretium lacinia eu non lacus. Nullam elementum faucibus odio. Vivamus tincidunt nisi et bibendum lobortis. Sed ac orci arcu. Nullam ut turpis aliquam magna placerat faucibus eu eu eros. Nam auctor dapibus turpis at dignissim. Nullam sem velit, imperdiet eu feugiat vitae, malesuada a turpis. + +In consequat lorem id massa pulvinar, et eleifend enim mattis. Ut ultricies lacinia neque, et suscipit nisl pulvinar nec. In varius dolor eu sem iaculis egestas. Ut blandit neque mi, nec dictum sapien scelerisque at. Donec sed sem nec justo placerat elementum non non nisi. Curabitur eget maximus arcu, quis ultrices justo. Curabitur vel feugiat velit, in lobortis purus. Proin vel lorem quis diam lobortis ultrices vel non est. Proin eget lacus sed arcu ullamcorper tempus. Donec sed tortor tortor. Phasellus viverra nec augue ac dignissim. Integer vestibulum purus enim, at blandit est ultrices a. + +Vestibulum dapibus interdum mi, sit amet accumsan risus sollicitudin eget. Phasellus nec ipsum scelerisque, rhoncus leo quis, posuere sem. Etiam consequat a magna et lacinia. Integer neque enim, fringilla a euismod non, euismod non risus. Maecenas sit amet congue erat, vitae commodo enim. Sed ipsum eros, suscipit non tempus ac, posuere eu mi. Vivamus mollis mollis ullamcorper. Pellentesque venenatis quis libero at vulputate. Quisque rhoncus dapibus arcu, nec aliquet ante accumsan tincidunt. Aenean porttitor condimentum elit vel ullamcorper. Maecenas at lacus ornare, interdum libero vitae, cursus sapien. Nullam sit amet purus vel ligula porta ornare. Quisque euismod metus sit amet aliquam facilisis. Pellentesque arcu est, vestibulum id magna id, feugiat laoreet ipsum. Nunc tempus lobortis quam in semper. Vivamus mollis convallis arcu, ut lobortis mauris fringilla vitae. + +Quisque tincidunt non enim nec dapibus. Fusce a ante vel erat volutpat commodo. Fusce laoreet euismod erat non bibendum. In aliquam odio purus. Mauris arcu libero, tincidunt vitae sollicitudin eget, pretium vel tortor. Ut imperdiet nibh vitae maximus efficitur. Duis eget mauris eleifend sem lobortis ornare. Donec porttitor mi ac mauris facilisis, vitae posuere lacus tincidunt. Mauris consectetur, urna sed dignissim pellentesque, dui risus tempor magna, ut maximus quam tortor at quam. Curabitur varius urna elit, vel ornare ex lobortis vel. Aenean sed ipsum mi. Sed venenatis elementum dui, a faucibus magna venenatis quis. Morbi leo velit, imperdiet eu suscipit a, commodo a augue. + +Aenean interdum vitae lacus non laoreet. Quisque congue massa ex, in scelerisque diam condimentum eget. Aliquam quis luctus est. Fusce vehicula ligula sed enim convallis, in posuere turpis suscipit. Suspendisse potenti. Phasellus eget nibh vitae urna cursus faucibus. In hac habitasse platea dictumst. Proin porta eu lacus non ultricies. Praesent ullamcorper mollis ex non tristique. In vitae ante purus. Vestibulum id convallis tortor. In varius pharetra eros, vel porta metus imperdiet pretium. Praesent vel augue nec velit mollis feugiat sed porttitor ipsum. Sed dapibus scelerisque ultricies. Aliquam erat volutpat. Integer venenatis diam a risus rhoncus, eu molestie tellus convallis. + +Integer justo augue, consequat at porttitor nec, maximus quis velit. Suspendisse a scelerisque dui, gravida semper orci. Aliquam quam purus, aliquam sed lobortis eu, commodo quis ex. Suspendisse scelerisque mollis nibh, id ultricies diam mattis sed. Pellentesque quis velit id nulla hendrerit porta. Aenean justo enim, tempus eu varius et, euismod ut nulla. Phasellus nec mauris erat. Sed pharetra lorem at malesuada feugiat. Integer egestas arcu magna, et fermentum velit condimentum vel. Cras at vehicula mauris. Maecenas pellentesque, erat in lobortis mollis, velit sem mollis metus, quis sagittis nibh mi sit amet eros. Mauris velit nibh, finibus at imperdiet quis, hendrerit in urna. Etiam eleifend varius risus, non mollis odio iaculis tempus. + +Donec ante ante, dignissim at mattis eget, luctus vitae nisi. Maecenas finibus sapien a urna interdum, sed tristique massa pellentesque. Duis eget blandit justo. Donec at nunc ligula. In justo nisi, feugiat eget sapien eget, varius commodo tellus. Donec elit nunc, blandit et maximus nec, consectetur sed erat. Curabitur sed consequat ligula. Proin at est est. Sed euismod efficitur ipsum vehicula consectetur. Proin rhoncus ante massa, in efficitur ipsum ultricies in. Pellentesque porta tortor tristique velit bibendum cursus. + +Proin tempor est in magna vestibulum, ac porta mauris efficitur. Proin urna nisl, vehicula imperdiet mattis ultrices, auctor et ex. Aliquam erat volutpat. In sit amet nunc mattis nisl vulputate vestibulum. Donec magna turpis, sagittis id mi at, laoreet condimentum nunc. Pellentesque efficitur faucibus hendrerit. Phasellus viverra nulla imperdiet, pharetra sapien quis, rutrum eros. Sed accumsan varius urna sit amet egestas. Integer ullamcorper, neque ut finibus sollicitudin, felis neque accumsan lectus, vel suscipit lorem ante eget purus. Duis facilisis dapibus nisl sit amet accumsan. Mauris vitae nibh ipsum. Cras velit tellus, sagittis a est eget, mattis ornare dolor. Proin blandit at nunc et fermentum. Etiam sodales gravida odio, et aliquet tellus mollis non. Praesent tristique mauris quis eros elementum, eget aliquet risus ullamcorper. Nam dapibus, mauris ac posuere consequat, purus justo vulputate eros, id suscipit nibh ipsum accumsan erat. + +Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vivamus ac erat enim. Sed fringilla erat at ultricies bibendum. Proin consequat non risus sit amet consequat. Quisque lacinia interdum dignissim. Curabitur sit amet faucibus leo. Cras sit amet eros arcu. Morbi volutpat massa libero, a sollicitudin turpis ultricies vitae. Maecenas vehicula, risus nec consectetur rutrum, turpis lorem pretium augue, ut sodales turpis tellus in urna. Sed a urna efficitur, pretium eros eget, efficitur orci. Quisque sit amet augue ac tellus faucibus congue. + +Quisque maximus eros ut mi tempus, at venenatis nisl sagittis. Suspendisse quis dui eget ligula aliquam ultricies et sed dolor. Ut bibendum magna ac vulputate ullamcorper. Phasellus et dolor lectus. Vivamus eget lacinia nisl. Nullam sollicitudin tempus justo vel pellentesque. Nunc rhoncus tellus et ligula consectetur, in commodo orci cursus. + +Curabitur laoreet lectus ex, a pharetra risus fringilla ac. Mauris quis convallis libero. Nam pharetra dolor at dolor tempus, eu facilisis risus tincidunt. Integer consectetur sapien sed sem tincidunt, id ullamcorper lorem accumsan. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Morbi congue gravida dui, vel eleifend dolor vehicula vel. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis eget massa mi. Sed ex ante, convallis vel convallis nec, ullamcorper ac sem. Phasellus lectus eros, dapibus ac vestibulum vel, semper quis dolor. + +Cras congue sed magna quis venenatis. Quisque semper nisl et sem posuere eleifend. Nam dictum auctor pretium. Cras vel erat lacus. Vestibulum efficitur iaculis consequat. In hac habitasse platea dictumst. Etiam malesuada sagittis libero, nec lacinia dolor egestas nec. + +Suspendisse metus ante, volutpat nec felis at, luctus faucibus urna. Phasellus blandit ante non nisl aliquam, a ultrices nunc finibus. Nunc vitae placerat dui. Praesent semper dapibus rhoncus. Vestibulum ligula dui, ultrices eget magna sed, luctus lobortis lacus. Proin facilisis dictum sapien in ultricies. Nam vestibulum sapien ut dui congue, eu ultrices arcu ullamcorper. Suspendisse sit amet est commodo, convallis dui non, sollicitudin nisl. Pellentesque laoreet faucibus tellus, nec vulputate arcu convallis in. Aenean consectetur justo quis nunc pellentesque, eu suscipit dui aliquam. Nulla aliquet ultrices tincidunt. Sed tristique lacinia quam sed venenatis. Ut gravida, purus sed mollis ultrices, odio lectus semper ipsum, id rutrum enim est sed lacus. Suspendisse at elementum nulla. Mauris at ex tortor. Nunc dapibus, mauris at tincidunt rutrum, odio mi scelerisque urna, ut facilisis dui leo in dolor. + +Nunc eget tortor hendrerit, laoreet risus eget, auctor mauris. Vivamus facilisis nec tellus sit amet dapibus. Nullam aliquam nunc et mattis ullamcorper. Sed egestas lectus id auctor ornare. Fusce eget dapibus nibh. Vivamus accumsan turpis elementum laoreet malesuada. Integer quis rhoncus leo. Curabitur efficitur, odio nec eleifend gravida, libero risus eleifend urna, vel commodo dolor purus id lacus. Pellentesque pellentesque euismod lacus, non tempor elit auctor sit amet. Integer suscipit commodo venenatis. Pellentesque cursus justo ipsum, at vulputate mi lobortis id. Proin convallis dolor cursus mauris luctus accumsan. Pellentesque semper risus sed urna hendrerit, vulputate scelerisque nisi fringilla. + +Maecenas at vestibulum neque. Nam ultricies fringilla mattis. Donec et nunc eget turpis mollis condimentum in vel enim. Quisque orci libero, blandit vel massa at, efficitur molestie augue. Aliquam sapien erat, finibus vel tempor vitae, fringilla tincidunt libero. Etiam interdum tincidunt diam eget molestie. Nam tortor lorem, suscipit id ultrices eget, viverra scelerisque ipsum. Vivamus vestibulum, tellus vel consectetur laoreet, quam elit vestibulum nisl, non imperdiet odio arcu vitae magna. Mauris euismod, dui ut vestibulum malesuada, felis diam finibus diam, et blandit sapien lacus id tortor. + +Integer consequat augue lectus, a fermentum turpis iaculis at. Sed ut facilisis mi, vitae pellentesque magna. Vestibulum velit tortor, scelerisque sed ornare vel, iaculis sit amet massa. In vitae neque odio. Nam ex metus, fringilla id justo in, mollis tincidunt purus. Praesent suscipit dolor ac ultrices pharetra. Sed eu massa eros. + +Fusce vestibulum metus sed felis pellentesque gravida ac vel sapien. Sed vel tellus eget orci auctor laoreet. Sed vitae pulvinar felis. Aliquam semper rutrum ipsum. Integer tincidunt nibh vel leo pellentesque, et gravida enim pretium. Cras varius lacus at nulla maximus, sed lacinia dui rhoncus. Cras metus felis, luctus vitae odio vel, tincidunt rhoncus purus. Maecenas aliquet justo vitae sapien tincidunt, quis pulvinar erat accumsan. Aenean suscipit mauris leo, nec tristique nisi faucibus vel. Etiam posuere vitae lorem id ultrices. Nunc feugiat nulla ut iaculis placerat. Praesent molestie hendrerit congue. Cras eu efficitur urna, facilisis semper ipsum. Phasellus in velit varius, condimentum risus in, rhoncus purus. Proin tincidunt quam non velit porta, vel ullamcorper ligula vestibulum. Ut mattis tortor ut lacus sollicitudin condimentum. + +Praesent semper ligula libero, ac tincidunt tortor dictum vulputate. Sed tristique egestas nulla et facilisis. Duis vitae orci justo. Proin consectetur auctor ipsum, vitae porta nunc venenatis et. Morbi arcu eros, condimentum sed ligula nec, aliquam sollicitudin dui. Sed non nulla lorem. Phasellus tortor ligula, pellentesque ac elementum vel, pellentesque vel dolor. Nunc vel lectus egestas, euismod dui id, facilisis nisi. + +Sed ultricies laoreet ligula blandit ultricies. Pellentesque a molestie nibh. Praesent bibendum gravida sagittis. Quisque molestie, ipsum id euismod ornare, nibh sem bibendum nulla, in mattis sapien magna id sapien. Donec sed quam porttitor, eleifend magna et, aliquet quam. Pellentesque laoreet neque sed est fermentum, eget lacinia ante sodales. Curabitur ex sapien, imperdiet sed efficitur vitae, posuere id neque. \ No newline at end of file diff --git a/Txt_Steg/txt_steg.py b/Txt_Steg/txt_steg.py index deb607d..312f093 100644 --- a/Txt_Steg/txt_steg.py +++ b/Txt_Steg/txt_steg.py @@ -1,5 +1,6 @@ import numpy as np + class txt_steg: def __init__(self, text_file: str = "text.txt", bit_to_hide: list[int] = None): """ @@ -7,11 +8,11 @@ class txt_steg: :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 + :type bit_to_hide: list[int] """ - self.text_file = text_file - self.bit_to_hide = [8 - bit_pos for bit_pos in bit_to_hide] - self.delimiter = "abc-123==" + self.text_file = text_file # PathName of the text file + self.bit_to_hide = [8 - bit_pos for bit_pos in bit_to_hide] if bit_to_hide else [1] # Default is LSB + self.delimiter = "abc-123==" # Delimiter to indicate the end of the secret data def encode(self, secret_data: str = "Hello World"): """ @@ -20,7 +21,7 @@ class txt_steg: :type secret_data: str """ print("[+] Encoding...") - # Read text file and covert to binary + # Read text file if self.text_file != "": with open(self.text_file, "r") as f: data = f.read() @@ -37,27 +38,28 @@ class txt_steg: raise ValueError( f"[-] Error: Binary Secret data length {len(secret_data)} is greater than data length {n_bytes}") - bits_to_hide = self.bit_to_hide data_index = 0 # Convert secret data to binary binary_secret_data = self.to_bin(secret_data) encoded_data = "" - # Encode data into text file + print(f"[+] Starting encoding...") + # Encode data into text for byte in data: byte = self.to_bin(byte) byte = "0" * (8 - len(byte)) + byte if data_index >= len(binary_secret_data): - encoded_data += byte + encoded_data += self.from_bin(''.join(byte)) else: - for bit_pos in bits_to_hide: + for bit_pos in self.bit_to_hide: if data_index < len(binary_secret_data): byte = list(byte) byte[bit_pos] = binary_secret_data[data_index] data_index += 1 encoded_data += self.from_bin(''.join(byte)) + print(f"[+] Encoded Successfully!") return encoded_data def decode(self) -> str: @@ -76,14 +78,14 @@ class txt_steg: raise FileNotFoundError("File not found") binary_data = "" - bit_to_hide = self.bit_to_hide - + print(f"[+] Gathering data from bit positions: {self.bit_to_hide}") for byte in data: byte = self.to_bin(byte) byte = "0" * (8 - len(byte)) + byte - for bit_pos in bit_to_hide: + for bit_pos in self.bit_to_hide: binary_data += byte[bit_pos] + print(f"[+] Converting binary data to text...") all_bytes = [binary_data[i:i + 8] for i in range(0, len(binary_data), 8)] decoded_data = "" @@ -92,6 +94,7 @@ class txt_steg: if decoded_data[-len(self.delimiter):] == self.delimiter: break + print(f"[+] Decoded Successfully!") return decoded_data[:-len(self.delimiter)] def to_bin(self, data: str) -> str | list[str]: @@ -125,9 +128,8 @@ class txt_steg: def main(): print("Welcome to Text Steganography") text_file_name = "test.txt" - secret_data = "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 nis" \ - "i id metus aliquam dapibus et nec felis. Cras quis ante rutrum, bibendum lacus ut, malesuada justo. " + with open("../Txt_Steg/secret_data.txt", "r") as f: + secret_data = f.read() # Create a unique random number list from 1-8, spanning anywhere from 1-8 bits, for testing purposes bits_to_hide = np.random.choice(range(1, 9), np.random.randint(1, 9), replace=False) @@ -137,12 +139,12 @@ def main(): # Encode encoded_file_name = "encoded_text.txt" - encoded_data = txt_steg(text_file_name, bits_to_hide).encode(secret_data) + encoded_data = txt_steg(text_file=text_file_name, bit_to_hide=bits_to_hide).encode(secret_data) with open(f"{encoded_file_name}", "w") as f: f.write(encoded_data) # Decode - decoded_data = txt_steg(encoded_file_name, bits_to_hide).decode() + decoded_data = txt_steg(text_file=encoded_file_name, bit_to_hide=bits_to_hide).decode() print(decoded_data)