Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # -*- coding: utf-8 -*-
- ########################################################################
- #
- # jpeg-stegano
- # Copy? Right! 2014 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
- # - outguess
- #
- # 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.4 2014/11/01 03:31:37 elias Exp $
- #
- ########################################################################
- #
- # Konfiguration
- # -------------
- #
- # Für diesen Empfänger wird verschlüsselt
- # (Vielleicht später auf mehrere erweitern, einer wird zufällig ausgewählt)
- #
- pgpfor='sag@ich.net'
- #
- # Schlüssel für die Steganografie mit outguess
- #
- stegkey='Ganz Geheimes Geheimwort'
- #
- # Dieser Qualitätsverlust wird beim Verschlüsseln erzeugt
- #
- quality_loss=5
- #
- # So viele Versuche werden gemacht
- #
- maxtries=3
- #
- # Programm
- # --------
- #
- # Ab hier braucht (hoffentlich) nichts mehr angepasst zu werden.
- #
- PATH=/bin:/usr/bin:/usr/games
- progname=$(basename $0)
- for fname
- do
- 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="$(dirname $fname)/old-$(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 outguess -k "$stegkey" -d $tname -p $nq "$fname" $nname
- then
- ok=1
- mv -b "$fname" "$bname"
- mv $nname "$fname"
- rm $tname
- 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