PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Darstellungsmöglichkeit,Perl-Implementation eines Krypto-Algos



ascii
21.03.2002, 20:16
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!!

Tharkun
21.03.2002, 20:21
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 ?

Smartie
21.03.2002, 22:28
ja, die bitwerte sind die gleiche, wandle doch die bitwerte in Hexadecimal-Codierungen um, dann wird es überall gleich dargestellt

ascii
22.03.2002, 09:42
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!!!

thodi
22.03.2002, 10:38
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.

ascii
22.03.2002, 12:15
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.

ascii
22.03.2002, 12:38
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 :)

thodi
22.03.2002, 12:42
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;

ascii
22.03.2002, 17:59
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!!!

ascii
22.03.2002, 19:07
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!!!

Smartie
23.03.2002, 11:36
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 ;)

mbo
05.04.2002, 08:53
@thodi ,@ascii:

Laßt mich net dumm sterben :-(

Wofür steht das x in .2x in deinem HexDumper nun?

ascii
06.04.2002, 14:31
perldoc -f sprintf :)

jetzt bin ich schon gleich wie Thodi!

mbo
07.04.2002, 11:41
@ascii:
Danke - wer lesen kann ist klar im Vorteil ... :-)