Schrift
[thread]12121[/thread]

Fehler in Hash-Algorithmus



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Gast Gast
 2008-07-02 22:22
#111749 #111749
Hi, da ich den/die Fehler in meinem Code nicht finde und die Person die ich immer Frage wenn was nicht geht auch nicht weiter wusste dachte ich mir ich frag mal hier.

Also ich habe einen Hash-Algorythmus gecodet, jedoch funktioniert er nochnicht richtig.
Ich denke der Fehler liegt zwischen den Zeilen 47-64.

Ich weiss das die Variabeln sinnlos benannt wurden und die meisten auch lieber ein use strict; und use warnings; am anfang sehen würden, da ich "leider" etwas chaotisch code ist das bei dem script nicht drin..

Ich wär euch sehr dankbar wenn ihr mir weiterhelfen könnt.


(Leider hatte der Code wegen der Beschränkung der maximalen Zeichen keinen Platzt mehr. Code folgt im nächsten post.)
Gast Gast
 2008-07-02 22:34
#111750 #111750
Code (perl): (dl )
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
print "Wort:";
$pw=<STDIN>;

chomp($pw);
$la=length($pw);                                    # Länge des Wortes
                  
$cos1=0;                                                # Teil die Buchstaben der Eingabe in einzelne Strings auf.
while($cos1<$la){
$ter1 = substr ($pw,$cos1,1);
push(@db1,$ter1);                  
$cos1++;
}            

#
                                
$res=$la*36;
$res2=$res/33;            
$ra = 36/$res2;

#
$trash='gt9uysf4d6pw2m1aqhcj0xv73bkliorn5ez8';
$co3=0;
$feng=$la*26;
while($co3<=$feng){     # Erzeugt (26*Wortlänge) Anzahl verschiedener schrott-code.
$tr=$trash;
$tr2=$trash;
$subs= substr($tr2,-$co3,$co3);
substr($tr,0,0)=$subs;
substr($tr,-$co3,$co3)='';
$co3++;                              
push(@trash,"$tr$tr$tr");                  
}

#

if ($la & 1){$ge='-'}  # guckt ob das wort gerade/ungerade ist

@ar= a..z;                 
@arg= A..Z;                    
while($qet5<$la){    # für diese schleife solange durch wie das Wort lang ist.

$var=0;
      while($var<26){ 
$tq=@trash[$zj];
            if(@db1[$qet5]=@ar[$var]){# Untersucht jeden Buchstaben ob er nun a,b,c etc ist und gibt jedem einen anderen trashcode.
            $tn=$ge.($var+$la);            
            $subs= substr($tq,$tn,$ra);             # nimmt soviel von dem trash code dass der hash am Ende 33 zeichen ergibt, und ersetzt die buchstaben des wortes.
print "$subs\n";
            substr(@db1[$qet5],0,$ra)=$subs;              
            }
            if(@db1[$qet5]=@arg[$var]){      # Macht das selbe mit Grossbuchstaben
            $tn2=$ge.($var+$la+1);
            $subs= substr($tq,$tn2,$ra);            
            substr(@db1[$qet5],0,$ra)=$subs;
            }
$zj++;                # nimmt einen neuen trash-code.
      $var++;       # geht zum nächsten buchstaben des alphabets.
      }
$qet5++;           #geht zum nächsten buchstaben des wortes.
}
print "@db1";
Linuxer
 2008-07-03 00:10
#111751 #111751
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Warum beschreibst Du nicht, was denn nicht funktioniert. Was willst Du haben, was liefert er?

Wenn Du selber der Meinung bist, dass der Code zu chaotisch ist, dann änder das. Es liegt an Dir. strict und warnings helfen Dir dabei...
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
esskar
 2008-07-03 09:18
#111752 #111752
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
oder nimm direkt was aus der Digest::* Familie.
betterworld
 2008-07-03 01:36
#111755 #111755
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Das wuerde ich aber auch so sehen wie Linuxer. Wie man auch auf Wiki:Wie frage ich? lesen kann, findet man den Fehler oft selbst, wenn man sich einfach mal die Zeit nimmt, den Code etwas huebscher zu schreiben und ihn strict-konform zu machen.

Gast+2008-07-02 20:22:29--
Ich denke der Fehler liegt zwischen den Zeilen 47-64.

Von diesen Zeilen finde ich 62-64 am interessantesten ;-)
Gast Gast
 2008-07-05 00:46
#111863 #111863
fast alle meine scripte sehen so aus. aber ich denke das sollte genügen wenn man noch die Kommentare dazu ansieht.
Der Fehler der darin steckt ist etwas schwer zu beschreiben, am besten ihr führt das ganze einfach mal aus.. ich komm leider nicht mehr weiter.



und ja zeile 62-64 sind nicht mehr drin da ich ein paar Zeilenumbrüche entfernen musste damit der code kurz genug war zum posten.
Linuxer
 2008-07-05 00:52
#111864 #111864
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Sorry, mir genügt es nicht.
Wenn fast alle Deine Skripte so aussehen, dann brauchen fast alle Deine Skripte dringendst eine Überarbeitung.

Selbst wenn man ihn ausführen würde, hilft das nicht weiter.
Denn man muss sich immer noch durch den Nicht-sprechenden Code wühlen, sollte man auf die Idee, dort ein Debugging betreiben zu wollen.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Gast Gast
 2008-07-05 03:33
#111867 #111867
Ich habe mich mal durch den Code gekämpft (eine gruselige Erfahrung.)
Kennst du kein "for" oder "split"?!
Kennst du kein "use strict" oder "use warings"??
Vergleiche werden mittels "==" für Zahlen und "eq" für Strings gemacht.
"lc" wandelt einen String in Kleinbuchstaben um.
Variablen sollten verständlich benannt werden.

Code: (dl )
1
2
3
$res=$la*36;
$res2=$res/33;
$ra = 36/$res2;

ist gleichbedeutend mit:
Code: (dl )
$ra=$la/33;

Obskurifikation für Anfänger???

Weißt du überhaupt was der Code tatsächlich macht???? Ich glaube nicht.

Um es ganz klar zu sagen. Der Code ist Müll. Auch die Idee dahinter ist nicht brauchbar.
Es funktioniert nicht einen die Zeichen im String "trash" zu rotieren und jeden Schritt in ein Array zu schreiben und dann mit diesem Array mittels Zeichen aus dem zu verschlüsselden String Zeichen aus einem Arrayeintrag heraus zu schneiden. Das Ergebnis ist entschlüsselbar Zudem werden Zeichen aus dem zu verschlüsselnden String nicht beachtet wenn dieser länger als 33 Zeichen ist. Weiterhin sähe der verschlüsselte String von "test", an den ersten Stellen gleich zu dem von "testen" aus. Das kann nicht wünschenswert sein.

Der Hauptfehler befindet sich in dem Bereich in dem du dieses "@trash" Array füllst. Mach mal eine Ausgabe bei jedem Durchlauf. Dir werden die Augen aus dem Kopf fallen.
betterworld
 2008-07-05 14:01
#111881 #111881
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Gast+2008-07-05 01:33:03--
Code: (dl )
1
2
3
$res=$la*36;
$res2=$res/33;
$ra = 36/$res2;

ist gleichbedeutend mit:
Code: (dl )
$ra=$la/33;

*rechne*... Ich glaube, es ist eher
Code: (dl )
$ra = 33/$la;

:-)

@OP: Die Frage, die uns alle bewegt: Wie lange kannst Du eigentlich schon Perl? "Alle meine Scripte" klingt ja schon ziemlich erfahren, aber wenn Du in all Deinen Scripten "=" als Vergleichsoperator benutzt, kann ich mir nicht vorstellen, dass eines davon funktioniert ;-)
pq
 2008-07-05 14:26
#111882 #111882
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ich habe mal den titel korrigiert. es heisst Algorithmus und nicht Algorythmus.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2008-07-02 22:22.