Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # -*- coding: utf-8 -*-
- ########################################################################
- #
- # jpeg-stegano
- # Copy? Right! 2015 Elias Schwerdtfeger, http://www.tamagothi.de/
- #
- # Zufällige, stark verschlüsselte fortune-Sprüche steganographisch
- # in JPEG-Bildern unterbringen, um die Datensammler bei der NSA ein
- # bisschen zu trollen.
- #
- # Erforderliche Laufzeitumgebung:
- # - bash
- # - Standard GNU tools
- # - ImageMagick
- # - fortune
- # - gpg
- # - steghide
- #
- # Es ist erforderlich, die Konfiguration im Quelltext anzupassen.
- #
- # Für den folgenden Code bekomme ich keine Schönheitspreise, ich weiß.
- # Natürlich ist dieses Programm lizenziert unter Piratenlizenz:
- # http://www.tamagothi.de/impressum/lizenz
- #
- # $Id: jpeg-stegano,v 1.8 2015/07/11 19:38:12 elias Exp $
- #
- ########################################################################
- #
- # Konfiguration
- # -------------
- #
- # Für diesen Empfänger wird verschlüsselt
- #
- pgpfor='sag@ich.net'
- #
- # Schlüssel für die Steganografie mit steghide
- # Ersetzt die X durch etwas eigenes und denkt noch etwas aus!
- #
- stegkey=$(date +xxxx-666-%Y-%m-%d-xxxx-%d-%j | md5sum - | sed 's/ .*$//')
- #
- # Dieser Qualitätsverlust wird beim Verschlüsseln erzeugt
- #
- quality_loss=4
- #
- # So viele Versuche werden gemacht
- #
- maxtries=5
- #
- # In diesem Verzeichnis werden die alten Bildversionen gespeichert.
- #
- archive_dir='steg-old'
- #
- # Programm
- # --------
- #
- # Ab hier braucht (hoffentlich) nichts mehr angepasst zu werden.
- #
- PATH=/bin:/usr/bin:/usr/games
- progname=$(basename $0)
- for fname
- do
- workdir=$(dirname $fname)
- olddir=$workdir/$archive_dir
- if [ ! -d "$olddir" ]
- then
- if ! mkdir "$olddir"
- then
- echo "Failed to create archive directory." 1>&2
- notify-send -i error "$progname" "Can not create $olddir"
- exit 1
- fi
- fi
- lname=$(basename $fname)
- if [ $(file -bi "$fname" | sed 's/;.*$//') != 'image/jpeg' ]
- then
- echo "$fname: not a JPEG image" 1>&2
- notify-send -i error "$progname" "'$lname' is not a JPEG image"
- exit 1
- fi
- q=$(identify -verbose "$fname" | grep 'Quality' | sed 's/^.*:\s*//')
- nq=$((q - quality_loss))
- bname="$olddir/$(basename $fname)"
- nname=/tmp/jpeg-steg-$$.jpg
- tname=/tmp/jpeg-steg-$$.txt
- ok=0
- tries=0
- trap "rm -f '$bname' $nname $tname" 1 2 15
- while [ $ok -eq 0 -a $tries -lt $maxtries ]
- do
- tries=$((tries + 1))
- if ! fortune | gpg -ae -r "$pgpfor" >$tname
- then
- rm $tname
- exit 1
- fi
- if steghide embed -cf "$fname" -p "$stegkey" -ef $tname -sf $nname
- then
- ok=1
- mv -b "$fname" "$bname"
- mv $nname "$fname"
- rm $tname
- else
- nq=$((nq - quality_loss))
- fi
- done
- if [ $tries -ge $maxtries ]
- then
- rm -f $tname $nname
- echo "$fname: random steganography failed" 1>&2
- notify-send -i error $progname "Error in processing '$lname'"
- fi
- trap "" 1 2 15
- done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement