Verschlüsselung / Entschlüsselung Perl Modul
H1N1
- perl
0 hotti0 H1N11 Vinzenz Mai0 hotti0 Vinzenz Mai0 LanX!
0 hotti0 Vinzenz Mai3 Christian Kruse
0 Vinzenz Mai1 Alexander (HH)
Hallo zusammen,
ich suche ein Perlmodul (oder Codeschnipsel) mit dem ich einen String verschlüsseln und auch wieder entschlüsseln kann. Der Key sollte relativ lang sein können (mindestens 10 Stellen) und der Algorithmus nicht ganz trivial.
Danke für Tipps.
bye,
H1N1
Weil Du's bist und heute Freitag ist ;-)
Schlüssel frei wählbar: z.B. qw(1 3 4 5 6 3 2 1 9)
Das Base64-Geraffel hab ich nur eingebaut, damit am Ende ASCII rauskommt, kannste auch weglassen.
Hotte
###########################################################################
# Text synchron verschlüsseln
sub kryptn{
my ($txt, $key) = @_; # $key ist eine Referenz auf @key
my $len = scalar @$key;
my $i = 0;
my $crypt = join "",
map { $i = ($i + 1) % $len;
chr((ord($_) + $$key[$i]) % 256) } split //, $txt;
return(encode_base64($crypt, ""));
}
###########################################################################
# Verschlüsselung aufheben
sub entkryptn{
my ($crypt, $key) = @_; # $key ist eine Referenz auf @key
my $len = scalar @$key;
my $i = 0;
$crypt = decode_base64($crypt);
my $orig = join "",
map { $i = ($i + 1) % $len;
chr((ord($_) - $$key[$i] + 256) % 256) }
split //, $crypt;
return($orig);
}
###########################################################################
Danke!!
Es funktioniert (base64 habe ich rausgenommen, da ich das Modul Mime::base64 derzeit nicht installiert habe).
#!/usr/bin/perl
###########################################################################
# Text synchron verschlüsseln
sub kryptn{
my ($txt, $key) = @_; # $key ist eine Referenz auf @key
my $len = scalar @$key;
my $i = 0;
my $crypt = join "",
map { $i = ($i + 1) % $len;
chr((ord($_) + $$key[$i]) % 256) } split //, $txt;
return($crypt);
}
###########################################################################
# Verschlüsselung aufheben
sub entkryptn{
my ($crypt, $key) = @_; # $key ist eine Referenz auf @key
my $len = scalar @$key;
my $i = 0;
my $orig = join "",
map { $i = ($i + 1) % $len;
chr((ord($_) - $$key[$i] + 256) % 256) }
split //, $crypt;
return($orig);
}
###########################################################################
@key = qw (7 a $ & a a ! P * " g);
my $text = "Was ein wunderschoener Tag\n";
print "TEXT: $text\n";
my $cryp_text=kryptn($text,\@key);
print "TEXT crypt: $crypt_text\n";
my $uncrypt_text=entkryptn($cryp_text,\@key);
print "TEXT uncrypt: $uncrypt_text\n";
Ich bin nicht so fit in Codierungsgeschichten, deshalb noch ne Frage hinterher...
Kann ich den Inhalt von $cryp_text problemlos in eine Mysql-DB als string abspeichern, wenn ich das base64 coding nicht mache? Bislang benutze ich für alle meine DB-Einträge UTF-8 bzw. würde das so $cryp_text = encode('UTF-8', $cryp_text); funktionieren?
Ciao
H1N1
Hallo,
[code lang=perl]#!/usr/bin/perl
###########################################################################Text synchron verschlüsseln
sub kryptn{
my ($txt, $key) = @_; # $key ist eine Referenz auf @key
my $len = scalar @$key;
my $i = 0;
my $crypt = join "",
map { $i = ($i + 1) % $len;
chr((ord($_) + $$key[$i]) % 256) } split //, $txt;
return($crypt);
}
###########################################################################Verschlüsselung aufheben
sub entkryptn{
my ($crypt, $key) = @_; # $key ist eine Referenz auf @key
my $len = scalar @$key;
my $i = 0;
my $orig = join "",
map { $i = ($i + 1) % $len;
chr((ord($_) - $$key[$i] + 256) % 256) }
split //, $crypt;
return($orig);
}
Ich bin nicht so fit in Codierungsgeschichten,
deswegen solltest Du von diesem ausgewiesenen Müll einfach Abstand halten. Perl hat doch sicher eine AES-Implementierung aufzuweisen.
Lesetipp: http://aktuell.de.selfhtml.org/weblog/php-verschluesselung-100-euro-wette. Dieser Algorithmus ist kein bisschen sicherer als der dort geknackte. Finger weg!
Freundliche Grüße
Vinzenz
hi,
»» Ich bin nicht so fit in Codierungsgeschichten,
deswegen solltest Du von diesem ausgewiesenen Müll einfach Abstand halten.
Ahja, da wurde viel diskutiert. Aber meinen Schlüssel hat keiner rausbekommen, den suche ich heute noch ;-)
Hotte
Hallo,
» »» Ich bin nicht so fit in Codierungsgeschichten,
»
» deswegen solltest Du von diesem ausgewiesenen Müll einfach Abstand halten.
Ahja, da wurde viel diskutiert. Aber meinen Schlüssel hat keiner rausbekommen, den suche ich heute noch ;-)
hast Du schon wieder mal nicht alles gelesen? Vertrau Henryk, dem großen Schlüsselfindemeister.
Henryk zeigt übrigens in letzterem Beitrag auf, warum base64-Codierung rein gar nichts zur Sicherheit beiträgt :-)
Freundliche Grüße
Vinzenz
Ahja, da wurde viel diskutiert. Aber meinen Schlüssel hat keiner rausbekommen, den suche ich heute noch ;-)
Na dann biete hundert Euro! Nicht für den Aufwand sondern für die Herabwürdigung eine Viginere-Verschlüsselung knacken zu müssen,
Seit 150 Jahren unsicher!!!
irgendwo hab ich ein GFA-Basic progrämmle das es auf dem Atari-ST erledigt (der freut sich aus dem Keller wieder vorgeholt zu werden)
Die einzige Chance die du hast ist das der Schlüssel
1. immer neu,
2. zufällig und
3. immer länger als die Nachricht ist...
hi,
Kann ich den Inhalt von $cryp_text problemlos in eine Mysql-DB als string abspeichern, wenn ich das base64 coding nicht mache?
Sischr.
Bislang benutze ich für alle meine DB-Einträge UTF-8 bzw. würde das so
$cryp_text = encode('UTF-8', $cryp_text);funktionieren?
MySQL ists egal, was für Zeichen reinkommen. Du musst nur zwei Dinge wissen:
ISO-8859: Es werden 8 Bit = 1 Byte reserviert
UTF-8: Es werden 24 Bit = 3 Byte reserviert
Platzverschwendung wäre z.B., wenn die Tabelle mit UTF-8 getagged wird, der Anteil der Zeichen, die mehr als 1 Byte benötigen jedoch nur gering ist.
Hotte
Hallo,
Ich bin nicht so fit in Codierungsgeschichten, deshalb noch ne Frage hinterher...
Kann ich den Inhalt von $cryp_text problemlos in eine Mysql-DB als string abspeichern, wenn ich das base64 coding nicht mache? Bislang benutze ich für alle meine DB-Einträge UTF-8 bzw.
Wenn Du keine base64-Codierung vornimmst - was sinnvoll ist - dann sollten Dir nach der Codierung binäre Daten vorliegen. Die dafür sinnvollen Datentypen sind VARBINARY oder einer der BLOB-Typen. Es ist eine denkbar schlechte Idee, für binäre Daten VARCHAR oder einer der TEXT-Typen mit einem Character-Set und einer Kollation zu verwenden. Wegen der von Hotte bereits angesprochenen Speicherproblematik gilt dies in diesem speziellen Fall für UTF-8 ganz besonders - es ist so ziemlich das verkehrteste, was Du nehmen kannst.
Freundliche Grüße
Vinzenz
你好 H1N1,
Es funktioniert (base64 habe ich rausgenommen, da ich das Modul Mime::base64 derzeit nicht installiert habe).
Nicht benutzen. Benutze eine vernünftige AES- oder DES-Implementierung. Selbstgeschriebene Verschlüsselungsverfahren sind idR grottig.
再见,
克里斯蒂安
Hallo,
ich suche ein Perlmodul (oder Codeschnipsel) mit dem ich einen String verschlüsseln und auch wieder entschlüsseln kann. Der Key sollte relativ lang sein können (mindestens 10 Stellen) und der Algorithmus nicht ganz trivial.
Weniger als eine Minute Suchen: http://search.cpan.org/~bdfoy/Crypt-Rijndael/Rijndael.pm, ein AES-Modul für Perl.
Freundliche Grüße
Vinzenz
Moin Moin!
Ich rieche hier "Passwort speichern und prüfen".
Dazu braucht es keine Verschlüsselung, im Gegenteil: Verschlüsselung ist hier GEFÄHRLICH. Denn der Entschlüsselungsalgorithmus und der Schlüssel müssen genau an der Stelle liegen, die beim Einbruch extrem gefährdet ist: Auf dem Server. Kommt jemand so weit, dass er Deine Password-Tabelle auslesen kann, kommt er in aller Regel auch an den Schlüssel und die Entschlüsselungsfunktion. Da kannst Du also genau so gut gleich Klartext speichern.
Deshalb benutzt man ein anderes Verfahren: Man berechnet einen Hashfunktion (eine Prüfsumme) über das Passwort und speichert nur diese Prüfsumme. Statt das eingegebene Passwort mit dem Original zu vergleichen, berechnet man aus der Eingabe wieder die selbe Hashfunktion und prüft, ob deren Ergebnis mit dem in der Datenbank übereinstimmt.
Problem: Gleiche Passworte erzeugen gleiche Hash-Werte. Daher benutzt man einen "Salt"-Wert, der zusätzlich mit in die Hash-Funktion gegeben wird. Das kann der Login-Name sein, besser ist aber ein zufälliger (String-)Wert, den man natürlich auch in der DB speichern muß.
Als Hash-Funktion nahm man crypt (katastrophal schlecht, weil es nur 8 Zeichen verarbeitet und alles andere ignoriert) oder MD5 (besser als nichts, aber quasi geknackt), Stand der Technik dürften die SHA-Funktionen und härtere Geschütze sein.
Das Digest-Package bringt einige Funktionen mit, über deren jeweilige Qualität sollte u.a. Wikipedia Auskunft erteilen können.
Alexander