Modified python files to add comments, encoded text file now resembles the old text file. Added files for testing.

This commit is contained in:
devoalda 2023-05-26 11:56:20 +08:00
parent 1794fb8646
commit 3f0133577f
4 changed files with 175 additions and 50 deletions

View File

@ -3,7 +3,7 @@ import numpy as np
class img_steg: 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 Initialize the class
:param image_name: Name of the image to encode or decode :param image_name: Name of the image to encode or decode
@ -12,8 +12,8 @@ class img_steg:
:type bit_to_hide: list[int] :type bit_to_hide: list[int]
""" """
self.image_name = image_name self.image_name = image_name
self.bit_to_hide = [8 - bit_pos for bit_pos in bit_to_hide] 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 = "=====" self.delimiter = "abc-123-a=="
def encode(self, secret_data: str = "Hello World") -> np.ndarray: def encode(self, secret_data: str = "Hello World") -> np.ndarray:
""" """
@ -36,6 +36,10 @@ class img_steg:
data_index = 0 data_index = 0
binary_secret_data = self.to_bin(secret_data) # Convert data to binary binary_secret_data = self.to_bin(secret_data) # Convert data to binary
data_len = len(binary_secret_data) # size of data to hide 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 row in image:
for pixel in row: for pixel in row:
r, g, b = self.to_bin(pixel) # Convert RGB Values to binary format r, g, b = self.to_bin(pixel) # Convert RGB Values to binary format
@ -60,13 +64,15 @@ class img_steg:
data_index += 1 data_index += 1
if data_index >= data_len: if data_index >= data_len:
break break
pixel[0] = int(''.join(r), 2) # convert modified binary back to integer for red pixel 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[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 pixel[2] = int(''.join(b), 2) # convert modified binary back to integer for blue pixel
if data_index >= data_len: if data_index >= data_len:
break break
print(f"[+] Encoding completed")
return image return image
def decode(self) -> str: def decode(self) -> str:
@ -79,6 +85,8 @@ class img_steg:
image = cv2.imread(self.image_name) # read image image = cv2.imread(self.image_name) # read image
binary_data = "" binary_data = ""
bit_to_hide = self.bit_to_hide bit_to_hide = self.bit_to_hide
print(f"[+] Extracting data from image...")
for row in image: for row in image:
for pixel in row: for pixel in row:
r, g, b = self.to_bin(pixel) 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 += 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 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 # Split by 8 bits
all_bytes = [binary_data[i: i + 8] for i in range(0, len(binary_data), 8)] all_bytes = [binary_data[i: i + 8] for i in range(0, len(binary_data), 8)]
# Convert from bits to characters # Convert from bits to characters
@ -96,6 +107,7 @@ class img_steg:
if decoded_data[-len(self.delimiter):] == self.delimiter: if decoded_data[-len(self.delimiter):] == self.delimiter:
break break
print(f"[+] Decoding completed")
return decoded_data[:-len(self.delimiter)] return decoded_data[:-len(self.delimiter)]
def to_bin(self, data: str) -> str | list[str]: def to_bin(self, data: str) -> str | list[str]:
@ -134,11 +146,12 @@ def main():
image_name = "pokemon.png" image_name = "pokemon.png"
encoded_image_name = "encoded_image.png" encoded_image_name = "encoded_image.png"
secret_data = "" 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() secret_data = f.read()
# Generate random bit positions to hide data into image for testing # 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 = 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 = list(bit_to_hide)
bit_to_hide.sort() bit_to_hide.sort()
print(f"Bits to hide: {bit_to_hide}") print(f"Bits to hide: {bit_to_hide}")
@ -147,9 +160,7 @@ def main():
# Encode the data into the image # Encode the data into the image
encoded_image = img_steg(image_name=image_name, bit_to_hide=bit_to_hide).encode(secret_data) 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_name, encoded_image)
cv2.imwrite("encoded_image." + extension, encoded_image)
print("Image Encoded Successfully")
# Decode the data from the image # Decode the data from the image
decoded_data = img_steg(image_name=encoded_image_name, bit_to_hide=bit_to_hide).decode() decoded_data = img_steg(image_name=encoded_image_name, bit_to_hide=bit_to_hide).decode()

76
Txt_Steg/secret_data.txt Normal file
View File

@ -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

View File

@ -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 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.
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 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.
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 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.
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 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.
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 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.
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 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.
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 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.
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 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.
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 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.
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 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.
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 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.
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 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.

View File

@ -1,5 +1,6 @@
import numpy as np import numpy as np
class txt_steg: class txt_steg:
def __init__(self, text_file: str = "text.txt", bit_to_hide: list[int] = None): 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 :param text_file: PathName of the text file to encode or decode
:type text_file: str :type text_file: str
:param bit_to_hide: Bit to hide the data in (1 - LSB to 8 - MSB) :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.text_file = text_file # PathName of the text file
self.bit_to_hide = [8 - bit_pos for bit_pos in bit_to_hide] 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==" self.delimiter = "abc-123==" # Delimiter to indicate the end of the secret data
def encode(self, secret_data: str = "Hello World"): def encode(self, secret_data: str = "Hello World"):
""" """
@ -20,7 +21,7 @@ class txt_steg:
:type secret_data: str :type secret_data: str
""" """
print("[+] Encoding...") print("[+] Encoding...")
# Read text file and covert to binary # Read text file
if self.text_file != "": if self.text_file != "":
with open(self.text_file, "r") as f: with open(self.text_file, "r") as f:
data = f.read() data = f.read()
@ -37,27 +38,28 @@ class txt_steg:
raise ValueError( raise ValueError(
f"[-] Error: Binary Secret data length {len(secret_data)} is greater than data length {n_bytes}") 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 data_index = 0
# Convert secret data to binary # Convert secret data to binary
binary_secret_data = self.to_bin(secret_data) binary_secret_data = self.to_bin(secret_data)
encoded_data = "" encoded_data = ""
# Encode data into text file print(f"[+] Starting encoding...")
# Encode data into text
for byte in data: for byte in data:
byte = self.to_bin(byte) byte = self.to_bin(byte)
byte = "0" * (8 - len(byte)) + byte byte = "0" * (8 - len(byte)) + byte
if data_index >= len(binary_secret_data): if data_index >= len(binary_secret_data):
encoded_data += byte encoded_data += self.from_bin(''.join(byte))
else: else:
for bit_pos in bits_to_hide: for bit_pos in self.bit_to_hide:
if data_index < len(binary_secret_data): if data_index < len(binary_secret_data):
byte = list(byte) byte = list(byte)
byte[bit_pos] = binary_secret_data[data_index] byte[bit_pos] = binary_secret_data[data_index]
data_index += 1 data_index += 1
encoded_data += self.from_bin(''.join(byte)) encoded_data += self.from_bin(''.join(byte))
print(f"[+] Encoded Successfully!")
return encoded_data return encoded_data
def decode(self) -> str: def decode(self) -> str:
@ -76,14 +78,14 @@ class txt_steg:
raise FileNotFoundError("File not found") raise FileNotFoundError("File not found")
binary_data = "" binary_data = ""
bit_to_hide = self.bit_to_hide print(f"[+] Gathering data from bit positions: {self.bit_to_hide}")
for byte in data: for byte in data:
byte = self.to_bin(byte) byte = self.to_bin(byte)
byte = "0" * (8 - len(byte)) + 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] 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)] all_bytes = [binary_data[i:i + 8] for i in range(0, len(binary_data), 8)]
decoded_data = "" decoded_data = ""
@ -92,6 +94,7 @@ class txt_steg:
if decoded_data[-len(self.delimiter):] == self.delimiter: if decoded_data[-len(self.delimiter):] == self.delimiter:
break break
print(f"[+] Decoded Successfully!")
return decoded_data[:-len(self.delimiter)] return decoded_data[:-len(self.delimiter)]
def to_bin(self, data: str) -> str | list[str]: def to_bin(self, data: str) -> str | list[str]:
@ -125,9 +128,8 @@ class txt_steg:
def main(): def main():
print("Welcome to Text Steganography") print("Welcome to Text Steganography")
text_file_name = "test.txt" text_file_name = "test.txt"
secret_data = "vulputate. In tincidunt arcu risus, eu lacinia metus viverra in. Maecenas id ipsum tortor. Nunc vita" \ with open("../Txt_Steg/secret_data.txt", "r") as f:
" e mauris vel turpis lobortis tincidunt sed sit amet purus. Aliquam sed pharetra neque. Sed eget nis" \ secret_data = f.read()
"i id metus aliquam dapibus et nec felis. Cras quis ante rutrum, bibendum lacus ut, malesuada justo. "
# Create a unique random number list from 1-8, spanning anywhere from 1-8 bits, for testing purposes # 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) bits_to_hide = np.random.choice(range(1, 9), np.random.randint(1, 9), replace=False)
@ -137,12 +139,12 @@ def main():
# Encode # Encode
encoded_file_name = "encoded_text.txt" 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: with open(f"{encoded_file_name}", "w") as f:
f.write(encoded_data) f.write(encoded_data)
# Decode # 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) print(decoded_data)