diff --git a/bin/slsb-set b/bin/slsb-set new file mode 100755 index 0000000..30f9cd8 --- /dev/null +++ b/bin/slsb-set @@ -0,0 +1,93 @@ +#!/usr/bin/env python +#-*- coding: utf-8 -*- + +# Stéganô - Stéganô is a basic Python Steganography module. +# Copyright (C) 2010-2011 Cédric Bonhomme - http://cedricbonhomme.org/ +# +# For more information : http://bitbucket.org/cedricbonhomme/stegano/ +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see + +__author__ = "Cedric Bonhomme" +__version__ = "$Revision: 0.1 $" +__date__ = "$Date: 2011/04/06 $" +__license__ = "GPLv3" + +try: + from stegano import slsbset +except: + print "Install stegano: python setup.py install" + +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() + + +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, options.generator_function) + try: + img_encoded.save(options.output_image_file) + except Exception, e: + # If hide() returns an error (Too long message). + print e + +elif options.reveal: + try: + secret = reveal(options.input_image_file, options.generator_function) + 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 \ No newline at end of file diff --git a/examples/lorem_ipsum.txt b/examples/lorem_ipsum.txt index 298df24..8e572ca 100644 --- a/examples/lorem_ipsum.txt +++ b/examples/lorem_ipsum.txt @@ -526,64 +526,4 @@ euismod imperdiet blandit id purus. Sed sed nisl nibh. Aliquam eu neque et sapien malesuada accumsan id a erat. Integer faucibus nibh nisl. Etiam magna massa, semper at imperdiet non, pellentesque sed turpis. Mauris feugiat, mi id cursus blandit, quam neque lacinia nulla, feugiat ultricies lorem tortor sed -sapien. Praesent ultrices consectetur porta. - -Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos -himenaeos. Aliquam erat volutpat. Ut dui ante, euismod a vehicula id, hendrerit -a justo. Aenean dictum nisi et diam condimentum in malesuada nunc gravida. In -interdum ipsum odio. Ut aliquam arcu varius dolor ornare molestie. Donec vel -commodo quam. Etiam lobortis consectetur ligula eget pulvinar. Integer semper -pharetra est, eget lobortis nisi tristique mollis. Vivamus fermentum risus vitae -ligula pretium tempor. Vestibulum laoreet magna ut lectus imperdiet molestie. -Cras quam dolor, sodales nec iaculis vitae, pellentesque a nunc. Maecenas -laoreet, eros quis euismod venenatis, sem orci imperdiet diam, nec auctor massa -lorem at tortor. Nullam consequat justo in tortor elementum luctus. Aliquam erat -volutpat. Fusce mollis libero eu tellus aliquet interdum. Vestibulum in odio -lacus. Vestibulum mauris elit, dignissim eget mollis non, sagittis vitae ante. - -In nec diam lectus, et scelerisque orci. Nullam tincidunt dictum enim. -Suspendisse fermentum nunc vel enim elementum nec tincidunt quam rhoncus. Duis -non est a mi tristique mollis luctus a ante. Mauris eu quam eu purus ornare -iaculis in at lorem. Nullam ut dignissim enim. Proin vestibulum felis sed nulla -euismod vitae hendrerit ligula tincidunt. Fusce vehicula, diam dapibus -scelerisque elementum, purus dolor consequat elit, vitae consectetur ante nisi -sit amet sapien. Sed non velit magna, rutrum lacinia orci. Nullam laoreet est -nec justo egestas rutrum. - -Nunc vel sapien nec ligula mattis suscipit. Morbi augue leo, elementum eu ornare -id, rhoncus nec libero. Sed risus ante, feugiat nec interdum et, euismod et est. -Pellentesque a eros elit. Etiam sagittis luctus lacus. Proin porttitor accumsan -erat, vitae convallis orci tempor eu. Praesent nec sodales urna. Phasellus -lacinia, justo sed vestibulum venenatis, eros sem porttitor odio, vitae -consectetur lectus ante ac diam. Lorem ipsum dolor sit amet, consectetur -adipiscing elit. Vestibulum egestas, nibh ut commodo pretium, ante nisi bibendum -nibh, eget consectetur nisl felis non est. Nam dolor purus, dapibus in facilisis -a, ultrices eget leo. Phasellus luctus, felis ornare tempor iaculis, orci velit -mattis tellus, in suscipit augue massa id diam. Nunc a tincidunt quam. Nullam ac -libero vel quam luctus scelerisque. Phasellus magna arcu, pretium id sodales -sed, porttitor at ligula. Phasellus quis augue diam, vitae cursus nulla. - -Sed interdum erat ut ligula tempor sollicitudin sed eget tortor. Mauris -vehicula, arcu sed aliquam tristique, ligula tortor aliquet dolor, quis ornare -lectus enim nec risus. Integer a ipsum mauris. Cras non tellus ac mauris aliquam -euismod. In vestibulum, eros non dictum bibendum, nibh arcu mollis massa, nec -fringilla dolor ante vitae est. Class aptent taciti sociosqu ad litora torquent -per conubia nostra, per inceptos himenaeos. Curabitur semper venenatis risus, eu -commodo nunc posuere in. Curabitur ultricies, sem et vehicula posuere, leo -ligula cursus nunc, ac malesuada ipsum risus ultrices felis. Aenean a felis -felis, quis luctus ligula. Morbi sit amet nulla mi. Aenean nec consectetur -ipsum. Curabitur ac ligula nec turpis aliquam bibendum. Integer vulputate mauris -sit amet elit auctor et mattis lorem lobortis. Nullam gravida imperdiet lacus, -tincidunt vehicula nibh hendrerit eget. Sed lacinia, nibh convallis adipiscing -consequat, leo ipsum consectetur felis, non euismod nisi odio id justo. Mauris -posuere iaculis nunc, vitae bibendum massa mollis id. - -Sed enim felis, eleifend et volutpat vitae, congue nec lectus. Pellentesque -lectus risus, egestas vitae eleifend vel, aliquam quis odio. Nullam eget nunc a -mauris aliquet luctus eget a augue. In hendrerit elit feugiat sapien vestibulum -eu lobortis metus luctus. Mauris eget elit enim. Sed ut nulla eu nisi vehicula -dapibus. Donec et justo leo. Vestibulum ac mi sem. Vestibulum vel sem id ipsum -lobortis varius. Sed blandit ornare aliquam. In hac habitasse platea dictumst. -Curabitur tempor velit vitae erat dignissim at ullamcorper elit accumsan. -Vestibulum in risus vel magna blandit interdum eu et lectus. Suspendisse varius -neque sed ligula rutrum commodo. Etiam sed placerat lectus. \ No newline at end of file +sapien. Praesent ultrices consectetur porta. \ No newline at end of file diff --git a/setup.py b/setup.py index 6d013d8..541ad14 100644 --- a/setup.py +++ b/setup.py @@ -3,10 +3,11 @@ from distutils.core import setup import os +import shutil setup( name='Stegano', - version='0.3', + version='0.4', author='Cédric Bonhomme', author_email='kimble.mandel@gmail.com', packages=['stegano'], @@ -16,3 +17,10 @@ setup( license='COPYING', description='A Python Steganography module.', ) + +print "Installing binaries" +shutil.copy2("./bin/slsb-set", "/bin/slsb-set") +shutil.copymode("./bin/slsb-set", "/bin/slsb-set") + +shutil.copy2("./bin/slsb", "/bin/slsb") +shutil.copymode("./bin/slsb", "/bin/slsb") \ No newline at end of file diff --git a/stegano/slsb-gen.py b/stegano/slsbset.py similarity index 100% rename from stegano/slsb-gen.py rename to stegano/slsbset.py