Archiv verlassen und diese Seite im Standarddesign anzeigen : Darstellungsmöglichkeit,Perl-Implementation eines Krypto-Algos
Hi Leute!!
Folgendes Problem:
Als ich wieder mal am coden war und ich mehrere bitwise Modifikationen durchführte, wie xor etc. konnte der Editor die outputfile nicht richtig darstellen, d.h die Standart Ascii codes reichen nicht aus.
um es zu verdeutlichen:
qwerty xor 2lös§e = C←±☺ü∟ <--- leider nicht überall gleich!
des weiteren:
r5l45RJ$59ef954§$%&$=T(QW§OJRQ§$ xor DSFFLMDScxvidt9rt54&%)=(f"§=$Wjs
çP►↕☻↑}§y1Î║wv♠ƒW
wie man sieht fehlen nen Haufen Zeilen bei der zweiten xor Funktion!!!!
Danke mal im vorraus!!
Schau dir das file in einem HEX Editor an, dann siehst du die Werte direkt und musst dich nicht darauf verlassen, dass es auch ascii zeichen mit den werten gibt. Oder worum gehts dir ?
ja, die bitwerte sind die gleiche, wandle doch die bitwerte in Hexadecimal-Codierungen um, dann wird es überall gleich dargestellt
Danke für die schnelle Antwort.
Ich werde mal schauen obs in Perl ne Funktion dafür gibt... hmm vielleicht den output hmmm... mal nachdenken!!!
Original geschrieben von ascii
Ich werde mal schauen obs in Perl ne Funktion dafür gibt... hmm vielleicht den output hmmm... mal nachdenken!!!
Nimm sprintf.
Thodi, du bist doch nen Perl coder... wie löst du solche Probleme elegant? Du hast doch sicher mal nen Kryptographischen Algorithmus geschrieben (in Perl) kannste net mal einen Teil davon posten damit ich sehe wie man solche und ähnliche, bin sicher da kommen noch 10 andere, Probleme dazu löst.
Leude... *G* bin zu douf zum coden!!!! Arrg...
ich poste mal ein wenig Perl code... keine Kritik bitte ist noch ungefähr 3,2 parsec von der Fertigstellung :):
$Pfad = ">c:/Proggen/Perl/algo/crypt.txt"; # Globale Variablen Deklaration
$PFAD = ">>c:/Proggen/Perl/algo/crypt.txt"; # Der zweite Pfad wird initialisiert
#$input_l_crypt = "";
print "Den Schlüssel: \n";
chomp ($H_Key = <STDIN>); #Hauptkey durch Eingabeaufforderung
print "Feistel, zuerst Input von linker Seite dann von rechter!!!\n";
chomp ($input_links = <STDIN>);
#chomp ($input_rechts = <STDIN>);
print "Anzahl der Runden (Nicht mehr als 4 möglich): ";
chomp ($n = <STDIN>);
$N = $n;
## While Schleife Beginnt
LOOP:
while ($n > 0) {
if ($n < $N) {
$input_l_crypt = &Proz_Links;
open (datei, $PFAD) || die "$!";
print datei $input_l_crypt || die "Tryin' $!";
$n--;
next LOOP;
}
$input_l_crypt = &Proz_Links;
open (datei, $Pfad) || die "$!";
print datei $input_l_crypt || die "Tryin' $!";
$n--;
}
sub Proz_Links { # }
my ( $Runden_Key, $temp_crypt_l, $K_Zwischenspeicher ); #RundenKey als my Var deklariert
# Test:
#$input_l_crypt = $input_l;
#return ($input_l_crypt);
########################
#print $n; Das NumberZeichen entfernen für eventuelle Prüfungen!!!
if ($n == 4)
{
$K_Zwischenspeicher = reverse ($input_links);
$Runden_Key = $input_links ^ $H_Key; #Rundenkey wird erstellt
$temp_crypt_l = $Runden_Key ^ $K_Zwischenspeicher;
return ($temp_crypt_l);
}
if ($n == 3)
{
$K_Zwischenspeicher = $input_links;
$Runden_Key = $input_links ^ $H_Key; #Rundenkey wird erstellt
$temp_crypt_l = $Runden_Key ^ $K_Zwischenspeicher;
return ($temp_crypt_l);
}
if ($n == 2)
{
$K_Zwischenspeicher = reverse ($input_links);
$Runden_Key = $input_links ^ $H_Key; #Rundenkey wird erstellt
$temp_crypt_l = $Runden_Key ^ $K_Zwischenspeicher;
return ($temp_crypt_l);
}
if ($n == 1)
{
$K_Zwischenspeicher = reverse ($input_links);
$Runden_Key = $input_links ^ $H_Key; #Rundenkey wird erstellt
$temp_crypt_l = $Runden_Key ^ $K_Zwischenspeicher;
return ($temp_crypt_l);
}
}
#sub Proz_Rechts {
#
#my ( $Runden_Key ); #RundenKey als my Var deklariert
#
#$Runden_Key = $input_r ^ $H_Key;
#print $Runden_Key;
#
#}
Wollte mal eben ein paar Sachn mit Strings anstellen...
Das Script läuft wie ihr sicher erkennen könnt sind die runden total gleich also könnt ihr beim Runden input gleich ne 1 reinschreiben. Über der Outputfile dürft ihr euch halt net wundern wenn das ganze Zeug nicht darstellbar iss!!!
Verbesserungen sind immer gern willkommen besonders wegen der Darstellbarkeit :)
Nö, hab ich noch nie. Ein supereinfacher Hexdumper wäre aber z.B.:
#!/usr/bin/perl -w
use strict;
open FH, "<randombits" or die "open: $!";
my $data = join '', <FH>;
close FH;
printf '0x%2.2x ', $_ for map ord, split //, $data;
Hab Dank Thodi... hmm wöfür steht
printf '0x%2.2x ', $_ for map ord, split //, $data;
das .2x? Also ich mein jetzt nur das x in .2x!!!
Update (nen kleines):
$Pfad = ">c:/Proggen/Perl/algo/crypt.txt"; # Globale Variablen Deklaration
$PFAD = ">>c:/Proggen/Perl/algo/crypt.txt"; # Der zweite Pfad wird initialisiert
#$input_l_crypt = "";
print "Den Schlüssel: \n";
chomp ($H_Key = <STDIN>); #Hauptkey durch Eingabeaufforderung
print "Noch einen Schlüssel: \n";
chomp ($H2_Key = <STDIN>);
print "Feistel, zuerst Input von linker Seite dann von rechter!!!\n";
chomp ($input_links = <STDIN>);
chomp ($input_rechts = <STDIN>);
print "Anzahl der Runden (Nicht mehr als 4 möglich): ";
chomp ($n = <STDIN>);
$N = $n;
## While Schleife Beginnt
while ($n > 0) {
$input_l_crypt = &Proz_Links;
$input_l_buffer_crypt = $input_l_crypt;
print "\nTEST:\n\$input_l_crypt: $input_l_crypt\n\$input_l_buffer_crypt: $input_l_buffer_crypt\n";
$n--;
if ($n == '0') {
open (datei, $Pfad) || die "$!";
print datei $input_l_crypt || die "Tryin' $!";
}
}
sub Proz_Links { # }
my ( $Runden_Key, $temp_crypt_l, $K_Zwischenspeicher ); #RundenKey als my Var deklariert
# Test:
#$input_l_crypt = $input_l;
#return ($input_l_crypt);
########################
#print $n; Das NumberZeichen entfernen für eventuelle Prüfungen!!!
if ($n == 4)
{
$K_Zwischenspeicher = reverse ($H2_Key);
print "1: TEST: \$K_Zwischenspeicher: $K_Zwischenspeicher\n";
$Runden_Key = $K_Zwischenspeicher ^ $H_Key; #Rundenkey wird erstellt
print "1: TEST: \$Runden_Key: $Runden_Key\n";
$temp_crypt_l = $Runden_Key ^ $input_rechts;
print "1: TEST: \$temp_crypt_l : $temp_crypt_l\n";
return ($temp_crypt_l);
}
if ($n == 3)
{
$K_Zwischenspeicher = $H_Key;
$Runden_Key = $input_links ^ reverse ($input_l_buffer_crypt); #Rundenkey wird erstellt
$temp_crypt_l = $H2_Key ^ $K_Zwischenspeicher;
$temp_crypt_l = reverse ($temp_crypt_l);
return ($temp_crypt_l);
}
if ($n == 2)
{
$K_Zwischenspeicher = reverse ($input_links);
print "2: TEST: \$K_Zwischenspeicher: $K_Zwischenspeicher\n";
$Runden_Key = $K_Zwischenspeicher ^ $H_Key; #Rundenkey wird erstellt
print "2: TEST: \$Runden_Key: $Runden_Key\n";
$temp_crypt_l = $Runden_Key ^ $$H2_Key;
print "2: TEST: \$temp_crypt_l : $temp_crypt_l\n";
return ($temp_crypt_l);
}
if ($n == 1)
{
$Runden_Key = $input_rechts ^ $H_Key; #Rundenkey wird erstellt
$K_Zwischenspeicher = $Runden_Key ^ reverse ($input_links);
$temp_crypt_l = $input_l_buffer_crypt ^ $K_Zwischenspeicher;
return ($temp_crypt_l);
}
}
#sub Proz_Rechts {
#
#my ( $Runden_Key ); #RundenKey als my Var deklariert
#
#$Runden_Key = $input_r ^ $H_Key;
#print $Runden_Key;
#
p.s Seht selbst... es gitb noch derbe Probleme da ich die Rundenfunktion (noch) nicht einwandfrei gestaltet habe...
wird sich aber noch ändern!!!
und da du ein braver Kryptograph/Programmierer bist, erstellst du ne sprachenunabhängige Beschreibung/Doku, sollte dich vielleicht auf ein
oder 2 Ideen/Fehlerbereinigungen bringen. :D ;)
@thodi ,@ascii:
Laßt mich net dumm sterben :-(
Wofür steht das x in .2x in deinem HexDumper nun?
perldoc -f sprintf :)
jetzt bin ich schon gleich wie Thodi!
@ascii:
Danke - wer lesen kann ist klar im Vorteil ... :-)