diff --git a/bin/lsb b/bin/lsb index 4d756f4..277d763 100755 --- a/bin/lsb +++ b/bin/lsb @@ -20,8 +20,8 @@ # along with this program. If not, see __author__ = "Cedric Bonhomme" -__version__ = "$Revision: 0.5 $" -__date__ = "$Date: 2016/03/18 $" +__version__ = "$Revision: 0.6 $" +__date__ = "$Date: 2016/08/04 $" __license__ = "GPLv3" try: @@ -31,53 +31,52 @@ except: from stegano import tools -from optparse import OptionParser -parser = OptionParser(version=__version__) -parser.add_option('--hide', action='store_true', default=False, - help="Hides a message in an image.") -parser.add_option('--reveal', action='store_true', default=False, - help="Reveals the message hided in an image.") +import argparse +parser = argparse.ArgumentParser(prog='Stegano') +group_method = parser.add_mutually_exclusive_group(required=True) +group_method.add_argument('--hide', action='store_true', default=False, + help='Hides a message in an image.') +group_method.add_argument('--reveal', action='store_true', default=False, + help='Reveals the message hided in an image.') + # Original image -parser.add_option("-i", "--input", dest="input_image_file", +parser.add_argument("-i", "--input", dest="input_image_file", help="Input image file.") -# Image containing the secret -parser.add_option("-o", "--output", dest="output_image_file", - help="Output image containing the secret.") +group_secret = parser.add_mutually_exclusive_group() # Non binary secret message to hide -parser.add_option("-m", "--secret-message", dest="secret_message", +group_secret.add_argument("-m", dest="secret_message", help="Your secret message to hide (non binary).") - -# Binary secret to hide (OGG, executable, etc.) -parser.add_option("-f", "--secret-file", dest="secret_file", +# Binary secret message to hide +group_secret.add_argument("-f", dest="secret_file", help="Your secret to hide (Text or any binary file).") -# Output for the binary binary secret. -parser.add_option("-b", "--binary", dest="secret_binary", + +# Image containing the secret +group_output = parser.add_mutually_exclusive_group() +group_output.add_argument("-o", "--output", dest="output_image_file", + help="Output image containing the secret.") +group_output.add_argument("-b", "--binary", dest="secret_binary", help="Output for the binary secret (Text or any binary file).") -parser.set_defaults(input_image_file = './pictures/Lenna.png', - output_image_file = './pictures/Lenna_enc.png', - secret_message = '', secret_file = '', secret_binary = "") +arguments = parser.parse_args() -(options, args) = parser.parse_args() - - -if options.hide: - if options.secret_message != "" and options.secret_file == "": - secret = options.secret_message - elif options.secret_message == "" and options.secret_file != "": +if arguments.hide: + #parser.parse_args(['--hide']) + if arguments.secret_message != None: + secret = arguments.secret_message + elif arguments.secret_file != None: secret = tools.binary2base64(options.secret_file) - img_encoded = lsb.hide(options.input_image_file, secret) + img_encoded = lsb.hide(arguments.input_image_file, secret) try: - img_encoded.save(options.output_image_file) + img_encoded.save(arguments.output_image_file) except Exception as e: # If hide() returns an error (Too long message). print(e) -elif options.reveal: - secret = lsb.reveal(options.input_image_file) - if options.secret_binary != "": +elif arguments.reveal: + secret = lsb.reveal(arguments.input_image_file) + if arguments.secret_binary != None: data = tools.base642binary(bytes(secret, "utf-8")) from PIL import Image import io diff --git a/bin/lsb-set b/bin/lsb-set index 6823a55..e714c5d 100755 --- a/bin/lsb-set +++ b/bin/lsb-set @@ -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. @@ -33,70 +33,69 @@ except: from stegano import tools -from optparse import OptionParser -parser = OptionParser(version=__version__) -parser.add_option('--hide', action='store_true', default=False, - help="Hides a message in an image.") -parser.add_option('--reveal', action='store_true', default=False, - help="Reveals the message hided in an image.") +import argparse +parser = argparse.ArgumentParser(prog='Stegano') +group_method = parser.add_mutually_exclusive_group(required=True) +group_method.add_argument('--hide', action='store_true', default=False, + help='Hides a message in an image.') +group_method.add_argument('--reveal', action='store_true', default=False, + help='Reveals the message hided in an image.') + # Original image -parser.add_option("-i", "--input", dest="input_image_file", +parser.add_argument("-i", "--input", dest="input_image_file", help="Input image file.") # Generator -parser.add_option("-g", "--generator", dest="generator_function", +parser.add_argument("-g", "--generator", dest="generator_function", help="Generator") -# Image containing the secret -parser.add_option("-o", "--output", dest="output_image_file", - help="Output image containing the secret.") +group_secret = parser.add_mutually_exclusive_group() # Non binary secret message to hide -parser.add_option("-m", "--secret-message", dest="secret_message", +group_secret.add_argument("-m", dest="secret_message", help="Your secret message to hide (non binary).") - -# Binary secret to hide (OGG, executable, etc.) -parser.add_option("-f", "--secret-file", dest="secret_file", +# Binary secret message to hide +group_secret.add_argument("-f", dest="secret_file", help="Your secret to hide (Text or any binary file).") -# Output for the binary binary secret. -parser.add_option("-b", "--binary", dest="secret_binary", + +# Image containing the secret +group_output = parser.add_mutually_exclusive_group() +group_output.add_argument("-o", "--output", dest="output_image_file", + help="Output image containing the secret.") +group_output.add_argument("-b", "--binary", dest="secret_binary", help="Output for the binary secret (Text or any binary file).") -parser.set_defaults(input_image_file = './pictures/Lenna.png', - generator_function = 'fermat', - output_image_file = './pictures/Lenna_enc.png', - secret_message = '', secret_file = '', secret_binary = "") +arguments = parser.parse_args() -(options, args) = parser.parse_args() try: - generator = getattr(generators, options.generator_function)() + generator = getattr(generators, arguments.generator_function)() except AttributeError as e: - print("Unknown generator: {}".format(options.generator_function)) + print("Unknown generator: {}".format(arguments.generator_function)) exit(1) -if options.hide: - if options.secret_message != "" and options.secret_file == "": - secret = options.secret_message - elif options.secret_message == "" and options.secret_file != "": - secret = tools.binary2base64(options.secret_file) +if arguments.hide: + if arguments.secret_message != None: + secret = arguments.secret_message + elif arguments.secret_file != "": + secret = tools.binary2base64(arguments.secret_file) - img_encoded = lsbset.hide(options.input_image_file, secret, generator) + img_encoded = lsbset.hide(arguments.input_image_file, secret, generator) try: - img_encoded.save(options.output_image_file) + img_encoded.save(arguments.output_image_file) except Exception as e: # If hide() returns an error (Too long message). print(e) -elif options.reveal: +elif arguments.reveal: try: - secret = lsbset.reveal(options.input_image_file, generator) + secret = lsbset.reveal(arguments.input_image_file, generator) except IndexError: print("Impossible to detect message.") exit(0) - if options.secret_binary != "": + if arguments.secret_binary != None: data = tools.base642binary(secret) - with open(options.secret_binary, "w") as f: + with open(arguments.secret_binary, "w") as f: f.write(data) else: print(secret) diff --git a/stegano/lsb/lsb.py b/stegano/lsb/lsb.py index 90a1ec0..229d8c9 100755 --- a/stegano/lsb/lsb.py +++ b/stegano/lsb/lsb.py @@ -20,8 +20,8 @@ # along with this program. If not, see __author__ = "Cedric Bonhomme" -__version__ = "$Revision: 0.2.1 $" -__date__ = "$Date: 2016/03/13 $" +__version__ = "$Revision: 0.2.2 $" +__date__ = "$Date: 2016/08/04 $" __license__ = "GPLv3" import sys @@ -131,58 +131,3 @@ def write(image, output_image_file): print(e) finally: image.close() - -if __name__ == '__main__': - # Point of entry in execution mode. - from optparse import OptionParser - parser = OptionParser(version=__version__) - parser.add_option('--hide', action='store_true', default=False, - help="Hides a message in an image.") - parser.add_option('--reveal', action='store_true', default=False, - help="Reveals the message hided in an image.") - # Original image - parser.add_option("-i", "--input", dest="input_image_file", - help="Input image file.") - # Image containing the secret - parser.add_option("-o", "--output", dest="output_image_file", - help="Output image containing the secret.") - - # Non binary secret message to hide - parser.add_option("-m", "--secret-message", dest="secret_message", - help="Your secret message to hide (non binary).") - - # Binary secret to hide (OGG, executable, etc.) - parser.add_option("-f", "--secret-file", dest="secret_file", - help="Your secret to hide (Text or any binary file).") - # Output for the binary binary secret. - parser.add_option("-b", "--binary", dest="secret_binary", - help="Output for the binary secret (Text or any binary file).") - - parser.set_defaults(input_image_file = './pictures/Lenna.png', - output_image_file = './pictures/Lenna_enc.png', - secret_message = '', secret_file = '', secret_binary = "") - - (options, args) = parser.parse_args() - - - if options.hide: - if options.secret_message != "" and options.secret_file == "": - secret = options.secret_message - elif options.secret_message == "" and options.secret_file != "": - secret = tools.binary2base64(options.secret_file) - - img_encoded = hide(options.input_image_file, secret) - try: - img_encoded.save(options.output_image_file) - except Exception as e: - # If hide() returns an error (Too long message). - print(e) - - elif options.reveal: - secret = reveal(options.input_image_file) - if 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/lsbset/lsbset.py b/stegano/lsbset/lsbset.py index f7f24dc..d4047b1 100644 --- a/stegano/lsbset/lsbset.py +++ b/stegano/lsbset/lsbset.py @@ -132,73 +132,3 @@ def write(image, output_image_file): except Exception as e: # If hide() returns an error (Too long message). print(e) - -if __name__ == '__main__': - # Point of entry in execution mode. - from optparse import OptionParser - parser = OptionParser(version=__version__) - parser.add_option('--hide', action='store_true', default=False, - help="Hides a message in an image.") - parser.add_option('--reveal', action='store_true', default=False, - help="Reveals the message hided in an image.") - # Original image - parser.add_option("-i", "--input", dest="input_image_file", - help="Input image file.") - - # Generator - parser.add_option("-g", "--generator", dest="generator_function", - help="Generator") - - # Image containing the secret - parser.add_option("-o", "--output", dest="output_image_file", - help="Output image containing the secret.") - - # Non binary secret message to hide - parser.add_option("-m", "--secret-message", dest="secret_message", - help="Your secret message to hide (non binary).") - - # Binary secret to hide (OGG, executable, etc.) - parser.add_option("-f", "--secret-file", dest="secret_file", - help="Your secret to hide (Text or any binary file).") - # Output for the binary binary secret. - parser.add_option("-b", "--binary", dest="secret_binary", - help="Output for the binary secret (Text or any binary file).") - - parser.set_defaults(input_image_file = './pictures/Lenna.png', - generator_function = 'fermat', - output_image_file = './pictures/Lenna_enc.png', - secret_message = '', secret_file = '', secret_binary = "") - - (options, args) = parser.parse_args() - - try: - generator = getattr(generators, options.generator_function)() - except AttributeError as e: - print("Unknown generator: {}".format(options.generator_function)) - exit(1) - - if options.hide: - if options.secret_message != "" and options.secret_file == "": - secret = options.secret_message - elif options.secret_message == "" and options.secret_file != "": - secret = tools.binary2base64(options.secret_file) - - img_encoded = hide(options.input_image_file, secret, generator) - try: - img_encoded.save(options.output_image_file) - except Exception as e: - # If hide() returns an error (Too long message). - print(e) - - elif options.reveal: - try: - secret = reveal(options.input_image_file, generator) - except IndexError: - print("Impossible to detect message.") - exit(0) - if options.secret_binary != "": - data = tools.base642binary(secret) - with open(options.secret_binary, "w") as f: - f.write(data) - else: - print(secret)