SHARE
TWEET

jpeg-stegano

goebelmasse Nov 1st, 2014 387 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/bash
  2. # -*- coding: utf-8 -*-
  3. ########################################################################
  4. #
  5. # jpeg-stegano
  6. # Copy? Right! 2014 Elias Schwerdtfeger, http://www.tamagothi.de/
  7. #
  8. # Zufällige, stark verschlüsselte fortune-Sprüche steganographisch
  9. # in JPEG-Bildern unterbringen, um die Datensammler bei der NSA ein
  10. # bisschen zu trollen.
  11. #
  12. # Erforderliche Laufzeitumgebung:
  13. # - bash
  14. # - Standard GNU tools
  15. # - ImageMagick
  16. # - fortune
  17. # - gpg
  18. # - outguess
  19. #
  20. # Für den folgenden Code bekomme ich keine Schönheitspreise, ich weiß.
  21. # Natürlich ist dieses Programm lizenziert unter Piratenlizenz:
  22. # http://www.tamagothi.de/impressum/lizenz
  23. #
  24. # $Id: jpeg-stegano,v 1.4 2014/11/01 03:31:37 elias Exp $
  25. #
  26. ########################################################################
  27. #
  28. # Konfiguration
  29. # -------------
  30. #
  31. # Für diesen Empfänger wird verschlüsselt
  32. # (Vielleicht später auf mehrere erweitern, einer wird zufällig ausgewählt)
  33. #
  34. pgpfor='sag@ich.net'
  35. #
  36. # Schlüssel für die Steganografie mit outguess
  37. #
  38. stegkey='Ganz Geheimes Geheimwort'
  39. #
  40. # Dieser Qualitätsverlust wird beim Verschlüsseln erzeugt
  41. #
  42. quality_loss=5
  43. #
  44. # So viele Versuche werden gemacht
  45. #
  46. maxtries=3
  47. #
  48. # Programm
  49. # --------
  50. #
  51. # Ab hier braucht (hoffentlich) nichts mehr angepasst zu werden.
  52. #
  53. PATH=/bin:/usr/bin:/usr/games
  54. progname=$(basename $0)
  55. for fname
  56. do
  57.     lname=$(basename $fname)
  58.     if [ $(file -bi "$fname" | sed 's/;.*$//') != 'image/jpeg' ]
  59.     then
  60.         echo "$fname: not a JPEG image" 1>&2
  61.         notify-send -i error "$progname" "'$lname' is not a JPEG image"
  62.         exit 1
  63.     fi
  64.     q=$(identify -verbose "$fname" | grep 'Quality' | sed 's/^.*:\s*//')
  65.     nq=$((q - quality_loss))
  66.     bname="$(dirname $fname)/old-$(basename $fname)"
  67.     nname=/tmp/jpeg-steg-$$.jpg
  68.     tname=/tmp/jpeg-steg-$$.txt
  69.     ok=0
  70.     tries=0
  71.     trap "rm -f '$bname' $nname $tname" 1 2 15
  72.     while [ $ok -eq 0 -a $tries -lt $maxtries ]
  73.     do
  74.         tries=$((tries + 1))
  75.         if ! fortune | gpg -ae -r "$pgpfor" >$tname
  76.         then
  77.             rm $tname
  78.             exit 1
  79.         fi
  80.         if outguess -k "$stegkey" -d $tname -p $nq "$fname" $nname
  81.         then
  82.             ok=1
  83.             mv -b "$fname" "$bname"
  84.             mv $nname "$fname"
  85.             rm $tname
  86.         fi
  87.     done
  88.     if [ $tries -ge $maxtries ]
  89.     then
  90.         rm -f $tname $nname
  91.         echo "$fname: random steganography failed" 1>&2
  92.         notify-send -i error $progname "Error in processing '$lname'"
  93.     fi
  94.     trap "" 1 2 15
  95. done
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top