Example #1
0
def main():
    parser = argparse.ArgumentParser(prog="stegano-lsb")
    subparsers = parser.add_subparsers(help="sub-command help", dest="command")

    # Subparser: Hide
    parser_hide = subparsers.add_parser("hide", help="hide help")
    # Original image
    parser_hide.add_argument(
        "-i",
        "--input",
        dest="input_image_file",
        required=True,
        help="Input image file.",
    )
    parser_hide.add_argument(
        "-e",
        "--encoding",
        dest="encoding",
        choices=tools.ENCODINGS.keys(),
        default="UTF-8",
        help="Specify the encoding of the message to hide."
        + " UTF-8 (default) or UTF-32LE.",
    )

    group_secret = parser_hide.add_mutually_exclusive_group(required=True)
    # Non binary secret message to hide
    group_secret.add_argument(
        "-m", dest="secret_message", help="Your secret message to hide (non binary)."
    )
    # Binary secret message to hide
    group_secret.add_argument(
        "-f", dest="secret_file", help="Your secret to hide (Text or any binary file)."
    )

    # Image containing the secret
    parser_hide.add_argument(
        "-o",
        "--output",
        dest="output_image_file",
        required=True,
        help="Output image containing the secret.",
    )

    # Shift the message to hide
    parser_hide.add_argument(
        "-s", "--shift", dest="shift", default=0, help="Shift for the message to hide"
    )

    # Subparser: Reveal
    parser_reveal = subparsers.add_parser("reveal", help="reveal help")
    parser_reveal.add_argument(
        "-i",
        "--input",
        dest="input_image_file",
        required=True,
        help="Input image file.",
    )
    parser_reveal.add_argument(
        "-e",
        "--encoding",
        dest="encoding",
        choices=tools.ENCODINGS.keys(),
        default="UTF-8",
        help="Specify the encoding of the message to reveal."
        + " UTF-8 (default) or UTF-32LE.",
    )
    parser_reveal.add_argument(
        "-o",
        dest="secret_binary",
        help="Output for the binary secret (Text or any binary file).",
    )
    # Shift the message to reveal
    parser_reveal.add_argument(
        "-s", "--shift", dest="shift", default=0, help="Shift for the reveal"
    )

    arguments = parser.parse_args()

    if arguments.command == "hide":
        if arguments.secret_message is not None:
            secret = arguments.secret_message
        elif arguments.secret_file is not None:
            secret = tools.binary2base64(arguments.secret_file)

        img_encoded = lsb.hide(
            arguments.input_image_file, secret, arguments.encoding, int(arguments.shift)
        )
        try:
            img_encoded.save(arguments.output_image_file)
        except Exception as e:
            # If hide() returns an error (Too long message).
            print(e)

    elif arguments.command == "reveal":
        secret = lsb.reveal(
            arguments.input_image_file, arguments.encoding, int(arguments.shift)
        )
        if arguments.secret_binary is not None:
            data = tools.base642binary(secret)
            with open(arguments.secret_binary, "wb") as f:
                f.write(data)
        else:
            print(secret)
Example #2
0
File: lsb.py Project: tml/Stegano
                    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)
def main():
    parser = argparse.ArgumentParser(prog='stegano-lsb-set')
    subparsers = parser.add_subparsers(help='sub-command help', dest='command')

    # Subparser: Hide
    parser_hide = subparsers.add_parser('hide', help='hide help')
    # Original image
    parser_hide.add_argument("-i",
                             "--input",
                             dest="input_image_file",
                             required=True,
                             help="Input image file.")
    parser_hide.add_argument(
        "-e",
        "--encoding",
        dest="encoding",
        choices=tools.ENCODINGS.keys(),
        default='UTF-8',
        help="Specify the encoding of the message to hide." +
        " UTF-8 (default) or UTF-32LE.")

    # Generator
    parser_hide.add_argument("-g",
                             "--generator",
                             dest="generator_function",
                             action=ValidateGenerator,
                             nargs='*',
                             required=True,
                             help="Generator (with optional arguments)")
    parser_hide.add_argument("-s",
                             "--shift",
                             dest="shift",
                             default=0,
                             help="Shift for the generator")

    group_secret = parser_hide.add_mutually_exclusive_group(required=True)
    # Non binary secret message to hide
    group_secret.add_argument("-m",
                              dest="secret_message",
                              help="Your secret message to hide (non binary).")
    # Binary secret message to hide
    group_secret.add_argument(
        "-f",
        dest="secret_file",
        help="Your secret to hide (Text or any binary file).")

    # Image containing the secret
    parser_hide.add_argument("-o",
                             "--output",
                             dest="output_image_file",
                             required=True,
                             help="Output image containing the secret.")

    # Subparser: Reveal
    parser_reveal = subparsers.add_parser('reveal', help='reveal help')
    parser_reveal.add_argument("-i",
                               "--input",
                               dest="input_image_file",
                               required=True,
                               help="Input image file.")
    parser_reveal.add_argument(
        "-e",
        "--encoding",
        dest="encoding",
        choices=tools.ENCODINGS.keys(),
        default='UTF-8',
        help="Specify the encoding of the message to reveal." +
        " UTF-8 (default) or UTF-32LE.")
    parser_reveal.add_argument("-g",
                               "--generator",
                               dest="generator_function",
                               action=ValidateGenerator,
                               nargs='*',
                               required=True,
                               help="Generator (with optional arguments)")
    parser_reveal.add_argument("-s",
                               "--shift",
                               dest="shift",
                               default=0,
                               help="Shift for the generator")
    parser_reveal.add_argument(
        "-o",
        dest="secret_binary",
        help="Output for the binary secret (Text or any binary file).")

    # Subparser: List generators
    parser_list_generators = subparsers.add_parser('list-generators',
                                                   help='list-generators help')

    arguments = parser.parse_args()

    if arguments.command != 'list-generators':
        try:
            arguments.generator_function[0]
        except AttributeError:
            print('You must specify the name of a generator.')
            parser.print_help()
            exit(1)

        try:
            if (arguments.generator_function[0] == "LFSR"):
                # Compute the size of the image for use by the LFSR generator if needed
                tmp = tools.open_image(arguments.input_image_file)
                size = tmp.width * tmp.height
                tmp.close()
                arguments.generator_function.append(size)
            if (len(arguments.generator_function) > 1):
                generator = getattr(
                    generators, arguments.generator_function[0])(
                        *[int(e) for e in arguments.generator_function[1:]])
            else:
                generator = getattr(generators,
                                    arguments.generator_function[0])()

        except AttributeError as e:
            print("Unknown generator: {}".format(arguments.generator_function))
            exit(1)

    if arguments.command == 'hide':
        if arguments.secret_message != None:
            secret = arguments.secret_message
        elif arguments.secret_file != "":
            secret = tools.binary2base64(arguments.secret_file)

        img_encoded = lsbset.hide(arguments.input_image_file, secret,
                                  generator, int(arguments.shift))
        try:
            img_encoded.save(arguments.output_image_file)
        except Exception as e:
            # If hide() returns an error (Too long message).
            print(e)

    elif arguments.command == 'reveal':
        try:
            secret = lsbset.reveal(arguments.input_image_file, generator,
                                   int(arguments.shift))
        except IndexError:
            print("Impossible to detect message.")
            exit(0)
        if arguments.secret_binary != None:
            data = tools.base642binary(secret)
            with open(arguments.secret_binary, "w") as f:
                f.write(data)
        else:
            print(secret)

    elif arguments.command == 'list-generators':
        all_generators = inspect.getmembers(generators, inspect.isfunction)
        for generator in all_generators:
            print('Generator id:')
            print('    {}'.format(crayons.green(generator[0], bold=True)))
            print('Desciption:')
            print('    {}'.format(generator[1].__doc__))
Example #4
0
        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)