Schrift
[thread]12730[/thread]

perl md5 subroutine



<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten
Gast Gast
 2008-11-07 15:09
#116054 #116054
Hallo

ich experimentiere gerade etwas in perl und habe ein Problem

Code: (dl )
1
2
3
4
5
6
7
use Digest::MD5;
$pass= geheimesPasswort;
$nick= Ichbins;
$md5 = Digest::MD5->new;
$md5 -> add("$nick\0$pass");
$digest = $md5->hexdigest;
print "Digest is $digest\n";


funktioniert alles einwandfrei, aber wenn ich versuche es nachzuvollziehen und mittels eines md5 Generators nachzubauen funktioniert es nicht.

Ich denke mal mein Problem liegt darin

$nick\0$pass


Frage: was bewirkt \o zwischen $nick und $pass ?

John
GwenDragon
 2008-11-07 15:41
#116058 #116058
User since
2005-01-17
14540 Artikel
Admin1
[Homepage]
user image
\0 bedeutet \x00 also Null-Byte
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

Gast Gast
 2008-11-07 16:43
#116063 #116063
o.k.

leider klappt das immer noch net so wie ich möchte....

also wenn ich die routine oben ausführe bekomme ich

Code: (dl )
Digest is 5c4b9e0bf6092b291ddb71c77c016392


soweit so gut

nun versuche ich es nachzuvollziehen....

zuerst erzeuge ich die md5`s

$pass= geheimesPasswort ->md5 b76b84abdc024df568b72aee7cad42f0
$nick= Ichbins ->md5 4920fbc73dc9e741e74edab01eb3e0bd

nick\0$pass

verstehe ich so das ich die beiden md5`s ohne leerzeichen aneinanderschreibe


b76b84abdc024df568b72aee7cad42f0
4920fbc73dc9e741e74edab01eb3e0bd


hexdigest

Code: (dl )
1
2
3
$md5->hexdigest 

Same as $md5->digest, but will return the digest in hexadecimal form. The length of the returned string will be 32 and it will only contain characters from this set: '0'..'9' and 'a'..'f'.

würde ich so interpretieren das das ganze gehasht wird also eine md5 gebildet wird.

Ergebnis:
Code: (dl )
7cfc5c74fa90247addfc48d645fefaf1


nur leider passt das absolut nicht mit dem zusammen was die routine macht...

das Problem sind sicherlich meine recht geringen Perlkenntnisse ;-)

weiss jemand Rat ?

John
pq
 2008-11-07 17:15
#116066 #116066
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
ich suche noch nach deinem problem =)
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ perl -wle'
use Digest::MD5;
$pass= "geheimesPasswort";
$nick= "Ichbins";
$md5 = Digest::MD5->new;
$md5 -> add("$nick\0$pass");
$digest = $md5->hexdigest;
print "Digest is $digest";'
Digest is 5c4b9e0bf6092b291ddb71c77c016392
$ perl -wle'
use Digest::MD5;
$pass= "geheimesPasswort";
$nick= "Ichbins";
$md5 = Digest::MD5->new;
$md5 -> add("$nick$pass");
$digest = $md5->hexdigest;
print "Digest is $digest";'
Digest is 69b1ef3eaafc3823ae3b0b4280732ebb

die md5-summe wird über den kompletten string gebildet.
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
Gast Gast
 2008-11-07 18:20
#116067 #116067
na mein Problem ist das ich die Schritte nicht nachvollziehen kann in denen der hash erzeugt wird.

wenn ich es wie oben beschrieben versuche Schritt für Schritt nachzuvollziehen kommt halt was anderes raus.

Ich möchte halt nicht nur das der String funktioniert, sondern auch nachvollziehen können was er macht :-)

John
pq
 2008-11-07 18:52
#116069 #116069
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Gast+2008-11-07 17:20:12--
wenn ich es wie oben beschrieben versuche Schritt für Schritt nachzuvollziehen kommt halt was anderes raus.

dann würde ich mal behaupten, dass da der fehler steckt. probier doch mal meine beiden beispiele
und sag uns, was du herausbekommst, und wie.
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
Gast Gast
 2008-11-07 19:25
#116070 #116070
Ich habe alle beide Bsp. ausprobiert...

was ist der unterschied zwischen
Code: (dl )
$md5 -> add("$nick\0$pass");


und

Code: (dl )
$md5 -> add("$nick$pass");


\0 ist ja wie GwenDragon schreib null-Byte

ich muss hier in dieser Zeile ein Grundlegendes Problem mit dem Vertändniss haben denn ich würde beide Zeilen als gleich interpretieren, was sie ja definitiv nicht sind.

ich möchte halt wissen wie der String das intern abarbeitet.

ich verstehe $nick$pass so das nick und pass direkt aneinander in einer Zeile ausgegeben werden und dann in der nächsten Zeile mit hexdigest gehasht.

Das stimmt offensichtlich nicht, denn sonst würde ja das gleiche Ergebnis herauskommen ;-) .

John
pq
 2008-11-07 19:57
#116071 #116071
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
der unterschied zwischen beiden ist das nullbyte =)
weiss auch nicht, was ich sonst noch sagen soll. ein nullbyte ist ein byte, und das macht
einen unterschied. man sieht es halt nur nicht, wenn man den string ausgibt.
wenn du nicht weisst, was ein nullbyte ist, wie kamst du dann auf die idee, es in den string zu packen?
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
Gast Gast
 2008-11-07 20:17
#116073 #116073
ich hab etwas abgekupfert --Schäm--

kann ich mal Zeile für Zeile das ganze aufdröseln damit ich das raffe....

use Digest::MD5; ## ist klar verweist auf die perl interne md5 routine
$pass= "geheimesPasswort";
$nick= "Ichbins"; ## ist klar :-)
$md5 = Digest::MD5->new;## hier wird das md5 modul reseted so wie ich es begriffen habe.
$md5 -> add("$nick\0$pass");##hier hab ich Probleme, würde sagen er es wird einfach nick und pass nacheinander ausgegeben bzw. in eine Zeile geschrieben.
$digest = $md5->hexdigest;##hier wird das ganze dann gehasht

die print zeile erspar ich mir :-)

bin ich richtig ??

obwohl ich hier net richtig sein kann, denn sonst würde es ja passen..... hmpf

John
pq
 2008-11-07 20:44
#116074 #116074
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Gast+2008-11-07 19:17:32--
$md5 = Digest::MD5->new;## hier wird das md5 modul reseted so wie ich es begriffen habe.

naja, "resetted"... es wird ein objekt der klasse Digest::MD5 erstellt.
Quote
$md5 -> add("$nick\0$pass");##hier hab ich Probleme, würde sagen er es wird einfach nick und pass nacheinander ausgegeben bzw. in eine Zeile geschrieben.

hier wird der string $nick nullbyte $pass aneinandergeknüpft und dem modul zum frass vorgeworfen.
Quote
$digest = $md5->hexdigest;##hier wird das ganze dann gehasht

genau, hier wird der string $nick nullbyte $pass gehasht.
Quote
obwohl ich hier net richtig sein kann, denn sonst würde es ja passen..... hmpf

nun sag dochmal, warum es nicht passt! es passt wunderbar.
du redest die ganze zeit von einem anderen ergebnis, das du erwartest. was erwartest du
fur ein ergebnis und wie kommst du drauf? langsam bin ich echt ratlos.
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 3 >| >> 24 Einträge, 3 Seiten



View all threads created 2008-11-07 15:09.