Quotewenn du allerdings ernsthaft verschlüsseln willst schau mal ins cpan für blowfish etc.
Oh ne ne. Ich mach ganz leichte Verschlüsselung, die sieht so aus:
for (i=0;i<AnzahlZeichen;i++){
Zeichen[i] = Zeichen[i] xor NextPseudoRandomZeichen();
}
hier ist CODE:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/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 = <DATEI>;
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;
Die Verschlüsselung funktioniert gut, das einzige was mich nicht gefällt ist die Ausführungszeit.
Bei einer Datei ,die 50 MB gross ist, dauert die Verschlüsselung 10-11 sek, das Auslesen und Speichern liegt unter einer Sekunde.
Das gleiche Algorithmus geschrieben in C++ braucht für 100 MB Datei nur eine Sekunde!!!!
Hat jemand eine Idde wie man das Beschleunigen kann?
Die Idee direkt beim Einlesen auch speichern, denke ich wird langsamer --> Festplattenzugriffzeit.
Gruss Vaceslav