#!/usr/bin/perl -w use strict; use warnings; # Array mit Zeichen, die als Password genutzt werden my @pass; # Position in der Liste @pass my $pass_pos = 0; my $File; my $CryptString; my $StartTime; my $StopTime; my $Time; #=== FUNCTION ================================================================ # NAME: readpass # PURPOSE: ???? # DESCRIPTION: Liest eine Datei aus und benutzt sie als Password # PARAMETERS: 1. Dateiname # RETURNS: void #=============================================================================== sub readpass($){ print "\nRead pass"; $StartTime = time; my @Zeilen; if ( -e $_[0]){ open(DATEI,$_[0]); @Zeilen = ; close(DATEI); }else{ print "\n\tDatei existiert nicht!! Dateiname wird als Passsword benutzt: $_[0]\n"; $Zeilen[0] = $_[0]; } splice(@pass,0); $pass_pos = 0; foreach my $zeile (@Zeilen){ while (length $zeile > 0){ unshift(@pass, chop($zeile)); } } $StopTime = time; print "\n\ttime: ".($StopTime - $StartTime); $Time += $StopTime - $StartTime; } #=== FUNCTION ================================================================ # NAME: pass_getnext # PURPOSE: ???? # DESCRIPTION: Liefert einen Pseudo-Random Zeichen zurück # PARAMETERS: void # RETURNS: Pseudo-Random Zeichen #=============================================================================== sub pass_getnext(){ if ($pass_pos >= @pass){ $pass_pos = 0; } return ($pass[$pass_pos++]); } #=== FUNCTION ================================================================ # NAME: readfile # PURPOSE: ???? # DESCRIPTION: Liest eine Datei aus und Speicher sie in Variable $File # PARAMETERS: Dateiname # RETURNS: void #=============================================================================== sub readfile($){ print "\nRead file"; if (! -e $_[0]){ print "\n\tOriginal Datei ($_[0]) existiert nicht. Abbruch!\n"; exit; } $StartTime = time; my $AnzahlBytes = -s $_[0]; open(DATEI,$_[0]) || die "Datei konnte nicht geoffnet werden: ".$_[0]."\n"; my $AnzahlZeichen = read(DATEI, $File, $AnzahlBytes); close(DATEI); $File = reverse($File); $StopTime = time; print "\n\ttime: ".($StopTime - $StartTime); $Time += $StopTime - $StartTime; } #=== FUNCTION ================================================================ # NAME: cryptfile # PURPOSE: ???? # DESCRIPTION: Verschlüsselt einen String ($File) und speichern es in $CryptString # PARAMETERS: void # RETURNS: void #=============================================================================== sub cryptfile(){ print "\nCryptfile"; $StartTime = time; # Position von Pseudo-Generator auf null setzen $pass_pos = 0; $CryptString = ""; my $rand; while (length $File > 0){ $rand = pass_getnext(); $CryptString .= (chop($File) ^ $rand); } $StopTime = time; print "\n\ttime: ".($StopTime - $StartTime); $Time += $StopTime - $StartTime; } #=== FUNCTION ================================================================ # NAME: writefile # PURPOSE: ???? # DESCRIPTION: Schreibt den String $CryptString in eine angegebene Datei # PARAMETERS: Dateiname # RETURNS: void #=============================================================================== sub writefile($){ print "\nWrite file"; $StartTime = time; open(DATEI,">".$_[0]); print DATEI $CryptString; close(DATEI); $StopTime = time; print "\n\ttime: ".($StopTime - $StartTime); $Time += $StopTime - $StartTime; } #--------------------------------------------------------------------------- # Main-Function #--------------------------------------------------------------------------- if (@ARGV != 3){ print "\nZu wenig Parameter!!\n"; print "\tParameter 1: Original Datei\n"; print "\tParameter 2: Password oder Dateiname mit Password\n"; print "\tParameter 3: Name für schifrierte Datei\n"; exit; } readpass($ARGV[1]); readfile($ARGV[0]); cryptfile(); writefile($ARGV[2]); print "\nGesamtzeit: ".$Time;