From fef2040fca1d6a7592759c360bfdf55be44dce43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Bonhomme?= Date: Thu, 26 May 2016 07:18:56 +0200 Subject: [PATCH] Python 2 compatibility for exifHeader. --- bin/lsb | 15 +++++++++++---- stegano/exifHeader/exifHeader.py | 12 +++++++----- stegano/lsb/lsb.py | 4 ++-- stegano/tools.py | 7 ++++++- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/bin/lsb b/bin/lsb index 4cd66db..4d756f4 100755 --- a/bin/lsb +++ b/bin/lsb @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3.5 #-*- coding: utf-8 -*- # Stéganô - Stéganô is a basic Python Steganography module. @@ -78,8 +78,15 @@ if options.hide: elif options.reveal: secret = lsb.reveal(options.input_image_file) if options.secret_binary != "": - data = tools.base642binary(secret) - with open(options.secret_binary, "w") as f: - f.write(data) + data = tools.base642binary(bytes(secret, "utf-8")) + from PIL import Image + import io + file_like = io.BytesIO(data) + file_like.seek(0) + image = Image.open(file_like) + image.save(options.secret_binary) + """data = tools.base642binary(bytes(secret, "utf-8)")) + with open(options.secret_binary, "wb") as f: + f.write(data)""" else: print(secret) diff --git a/stegano/exifHeader/exifHeader.py b/stegano/exifHeader/exifHeader.py index bb998f4..2733f44 100644 --- a/stegano/exifHeader/exifHeader.py +++ b/stegano/exifHeader/exifHeader.py @@ -20,8 +20,8 @@ # along with this program. If not, see __author__ = "Cedric Bonhomme" -__version__ = "$Revision: 0.2 $" -__date__ = "$Date: 2016/05/17 $" +__version__ = "$Revision: 0.2.1 $" +__date__ = "$Date: 2016/05/26 $" __license__ = "GPLv3" from PIL import Image @@ -36,10 +36,12 @@ def hide(input_image_file, img_enc, secret_message = None, secret_file = None): if secret_file != None: with open(secret_file, "r") as f: - secret_file_content = f.read() - text = compress(b64encode(bytes(secret_file_content, "utf-8"))) - else: + secret_message = f.read() + + try: text = compress(b64encode(bytes(secret_message, "utf-8"))) + except: + text = compress(b64encode(secret_message)) img = Image.open(input_image_file) if "exif" in img.info: diff --git a/stegano/lsb/lsb.py b/stegano/lsb/lsb.py index 3cb3d77..90a1ec0 100755 --- a/stegano/lsb/lsb.py +++ b/stegano/lsb/lsb.py @@ -181,8 +181,8 @@ if __name__ == '__main__': elif options.reveal: secret = reveal(options.input_image_file) if options.secret_binary != "": - data = tools.base642binary(secret) - with open(options.secret_binary, "w") as f: + data = tools.base642binary(bytes(secret, "utf-8)")) + with open(options.secret_binary, "wb") as f: f.write(data) else: print(secret) diff --git a/stegano/tools.py b/stegano/tools.py index a83faab..16490e0 100755 --- a/stegano/tools.py +++ b/stegano/tools.py @@ -107,4 +107,9 @@ def base642binary(b64_fname): #b64_str = fin.read() #fin.close() # Decode base64 string to original binary sound object - return base64.b64decode(b64_fname) + missing_padding = 4 - len(b64_fname) % 4 + if missing_padding: + b64_fname += b'='* missing_padding + return base64.decodestring(b64_fname) + + #return base64.b64decode(b64_fname)