Neues in der Kategorie Kryptographie

In der Informatik ist eine Prüfsumme (engl.: checksum) eine einfache Maßnahme zur Gewährleistung von Datenintegrität bei der Datenübermittlung oder -speicherung. Sie wird hauptsächlich bei der Datensicherung und bei der Datenübertragung verwendet. (Quelle: Wikipedia: Prüfsumme.)

Nachfolgend finden Sie ein paar Beispiele zur Erstellung von Prüfsummen über Dateien.

Prüfsummen mit Bordmitteln erstellen

Hier bietet sich unpack() an.

#!/usr/bin/perl
use warnings;
use strict;
use Fcntl;  # Standardmodul
{	
        local undef $/;  # Slurp-Mode - Nur in diesem Block

        my $file = '/path/to/some/file';

        sysopen(FH, $file, O_RDONLY) or die $!;
	binmode(FH);
			# Die ganze Datei in den Hauptspeicher einlesen
	my $CompleteFile = <FH>;

	close(FH) or die $!;

	my $checksum;

		# Berechnet die gleiche Prüfsumme wie sum für System V
	$checksum = unpack ("%32C*", $CompleteFile) % 32767;
	print "System V: ", $checksum , "\n";

		# 16-bit Prüfsumme berechnen
	$checksum = unpack ("%16C*", $CompleteFile);
	print "16-bit: ", $checksum , "\n";
		
		# 32-bit Prüfsumme berechnen
	$checksum = unpack ("%32C*", $CompleteFile);
	print "32-bit: ", $checksum , "\n";
}
exit();

Diese Methode setzt voraus, dass die Daten bzw. Dateien in den Hauptspeicher passen. Vorteil dieser Methode: Sie funktioniert überall, wo Perl funktioniert.

CRC-32 Prüfsummen mit String::CRC32 erstellen

String::CRC32 von Sönke J. Peters kann CRC32-Prüfsummen von Zeichenketten und Dateien erzeugen. String::CRC32 erzeugt die gleichen CRC Prüfsummen wie ZModem, PKZip und entsprechende andere Programme.

#!/usr/bin/perl
use warnings;
use strict;
use Fcntl;  # Standardmodul

use String::CRC32;

my $file = '/path/to/some/file';

sysopen(FH, $file, O_RDONLY) or die $!;

binmode(FH);

my $crc = crc32(*FH);

close(FH) or die $!;

print "CRC32: ", $crc , "\n";

String::CRC32 ist in XS implementiert und läuft sehr schnell. Auch hier gilt, dass die Daten in den Hauptspeicher passen müssen.

CRC32 Prüfsummen mit Digest::CRC erstellen

Digest::CRC von Oliver Maul implementiert das Digest-Interface und kann CRC8-, CRC16-, CRC32- und CRC64-Prüfsummen erstellen.

#!/usr/bin/perl
use warnings;
use strict;
use Fcntl;  # Standardmodul
# OO style
use Digest::CRC;

my $file = '/path/to/some/file';
sysopen(FH, $file, O_RDONLY) or die $!;
binmode(FH);

my $ctx = Digest::CRC->new(type=>"crc32");
$ctx->addfile(*FH);
my $digest = $ctx->digest;
print "CRC32: ", $digest , "\n";
$digest = $ctx->hexdigest;
print "CRC32 (HEX): ", $digest , "\n";
close(FH) or die $!;

Die Datei muss hier nicht in den Hauptspeicher passen, addfile kann auch mit Dateien umgehen, die größer sind als der verfügbare Hauptspeicher.

Siehe auch

Net::Random von David Cantrell ermöglicht es, Zufallszahlen via Internet zu beziehen. Es ist eigentlich als Notfalllösung gedacht, falls keine oder keine geeigneten Zufallszahlen zur Verfügung stehen.

Net::Random nutzt dazu random.org bzw. www.fourmilab.ch als Quelle für Zufallszahlen. Beide Quellen geben an, das ihre Zufallszahlen "truly random" sind. Das sind immerhin bessere Zufallszahlen, als einige Betriebssysteme liefern.

Für kryptographische Zwecke würde ich jedoch keine Zufallszahlen via Internet beziehen.

Beispiel:

#!/usr/bin/perl
use strict;
use warnings;
use Net::Random;    

my $rand = Net::Random->new(     
  # use random.org randomness source,           
        src => 'random.org',
         # src => 'fourmilab.ch',
         # and return results from 1 to 2000
        min => 1,
        max => 2000
    );

my  @numbers = ();  

# Fehler werden über warnings gemeldet
eval {
 local $SIG{__WARN__} = sub {die 'WARN: '.shift};
        # get 5 numbers
  @numbers = $rand->get(5) 
};

# Fehlerbehandlung
if ( $@ ) {
 warn "Fehler: $@";
 die $@;
}
 


foreach my $number  ( sort { $a <=> $b }  @numbers ) {
     print "$number\n";
}
__END__

Über dieses Archiv

Diese Seite enthält aktuelle Einträge der Kategorie Kryptographie.

IDE ist die vorherige Kategorie.

Linux ist die nächste Kategorie.

Aktuelle Einträge finden Sie auf der Startseite, alle Einträge in den Archiven.

Perl Suchmaschine

Blog Roll

Powered by Movable Type 4.1