Tux L i n u x * G u i d e

v o n * I n g o * B l e c h s c h m i d t * ( c ) * 2 0 0 1
Tux
|Home|

|Neue Artikel|

|Index|

|Liste|

|Code-Snippets|

|Links|

|Allgemeines|

|Cool Stuff|
Entropie
Mit Dec 4 17:21:32 MET 2002
Entropie file Mathematik Perl /etc/magic magic

Dieser Artikel zeigt, was man alles mit der Entropie machen kann.

LinuxGuide Druckbare Version
Man-Page
Sourcecode
Verwandte Artikel:

Perl-Sicherheitslücken decken
Term::Cap in Perl
Operationen mit Dateien in Perl
CSV2HTML
Perl-Präprozessor
Farbverlauf mit Perl
Sichere Passwörter generieren



      .~.   
      /V\   
     // \\  
    /(   )\ 
     ^`~'^  
     


Hosted at Sorceforge.net
No ePATENTS
Viewable With Any Browser
Burn All GIFs!

M
it der Entropie - dem Maß der Ordnung - kann man einiges machen.
8 Bit Entropie ist das maximale Chaos, also der Zufall, und 0 Bit Entropie ist die perfekte Ordung.
Mit der Entropie kann man den Autor eines Buches herausfinden, Daten entschlüsseln und den Dateityp herausfinden.
Mein Skript entropie.pl befindet sich weiter unten.
# Beispiele
 
> entropie.pl perlskript.pl -mitte
4.43554668908691
> entropie.pl elf.programm -mitte
3.1079234417147
> entropie.pl englischer.text -mitte
4.51086652352629
 
 

Beim englischen Text würde sich, wenn man noch weitere Texte untersucht, ein Änderung ab der dritten Nachkommastelle zeigen.
Sie sehen, die Entropie unterscheidet sich von Dateityp zu Dateityp.
Das Utility file, das jeder Distribution beiliegt, erkennt den Dateityp an charakteristischen Merkmalen, zum Beispiel <html> bei HTML-Dateien. Würde man Tausende von Dateien gleichen Typs untersuchen, und den Durchschnitt herausrechnen, könnte man daraus ein file2 bauen. Dieses Programm könnte dann von file aufgerufen werden, damit file erstmal den groben Dateityp der zu untersuchenden Datei weiß (beispielsweise kompiliertes Programm, Skript, Text), und dann den Text genauer analysieren kann (Perl-, Shell-, Basic-Skript). Diese Vorgehensweise würde bei einer großen Magic-Datei (die Datei, aus der file seine Informationen zieht, meistens /etc/magic) Zeit sparen.

Janto Trappe hat entropie.pl nach PHP portiert und auf http://www.sylence.net/entropie/ veröffentlicht. Wer also mal schnell eine kleine Datei überprüfen will, sollte die PHP-Version benutzen.

Das Skript, Download:
# entropie.pl
 
#!/usr/bin/perl -w
# entropie.pl - Berechnet die Entropie von Dateien
# Copyright (C) Son Aug  5 11:42:36 MEST 2001 by Ingo Blechschmidt
#
#  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 2 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, write to the Free Software
#  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# Ingo Blechschmidt
# Arberstraße 5
# 86179 Augsburg
# E-Mail: iblech@web.de, http://www.way.to/uselinux/
# Tel.: +49 / 821 882955
#
# 

$file = '';
%char = ();
$len  = 0;
$a    = 0;
$b    = 0;
$c    = 0;
$d    = 0;
$e    = '';
$f    = '';
# Erw:
$kurz = '';

if (not $ARGV[0]) {
  print 'Bitte Dateinamen angeben: ';
  chomp($file = <STDIN>);
} else {
  $file = $ARGV[0];
}

open(DATEI, $file) || die("Konnte '$file' nicht laden!");
while () {
  $e = getc(DATEI);
  last if (not $e);
  $char{ord($e)}++;
  $len++;
}
close(DATEI);


# Erweiterungen Son Aug  5 11:34:44 MEST 2001:
if (defined $ARGV[1]) { $kurz = 'ja' } else { $kurz = 'nein' }

if ($kurz eq 'nein') {
  open(OUT, '|less') || die "Konnte nicht 'less' starten!";
  select(OUT);
}

print("Entropie der Datei '$file':\n\n") unless ($kurz eq 'ja');
for($b = 0; $b <= 255; $b++) {
  if (not $char{$b}) {
    $c = 0;
  } else {
    $a = $char{$b} / $len;
    $c = -($a * (log($a) / log(2)));
  }
  $d += $c;
  $f = chr($b); $f = '' if ($b < 32);
  print "$b ($f):  \t$c\n" unless ($c eq 0 or $kurz eq 'ja');
}
if ($kurz eq 'ja') {
  print "$d\n";
} else {
  print "\nMittlere Entropie der Datei: $d\n";
}

close(OUT) unless ($kurz eq 'ja');
select(STDOUT);
 
 

Document Informations: Content-Type: text/html; charset=iso-8859-1
Author: Ingo Blechschmidt
Description: LinuxGuide - Dieser Artikel zeigt, was man alles mit der Entropie machen kann.
Keywords: Entropie, file, Mathematik, Perl, /etc/magic, magic, LinuxGuide
Robots: all
Copyright: Copyright (C) 2002 by Ingo Blechschmidt
Date: 2003-12-04T17:21:32+02:00

Stichwortverzeichnis | Neue Artikel | Übersicht | Codesnippets | Links | Copyright | Cool Stuff | Home | Druckbare Version | Manpage | Sourcecode |
Diesen Artikel kritisieren, kommentieren oder ergänzen
Einen Neuen Artikel schreiben

 
This website is distributed under the GNU Free Documentation License .