PDA

Bekijk Volledige Versie : Digest::Perl::MD5 (of Digest::MD5::File) hashes



Jan Reilink
15/02/06, 19:30
Kan iemand mij misschien in de juiste richting wijzen? ik heb een perl
module geinstalleerd ("Digest::MD5::File" en "Digest::Perl::MD5") en ik
ben op zoek naar een methode om een 'gewone' md5sum van een string te
krijgen. Dus geen hexadecimale, geen binary, geen base64. De output zou
gelijk moeten zijn aan de commandline:

$ cat bla
abc123
$ md5sum bla
2c6c8ab6ba8b9c98a1939450eb4089ed bla

Terwijl de output via het web is:
e99a18c428cb38d5f260853678922e03

De gebruikte code staat als voorbeeld in de documentatie:
use Digest::Perl::MD5 'md5_hex';
print 'Digest is ', md5_hex('abc123'), "\n";

De Digest::SHA1 module geeft exact hetzelfde probleem.

Opzich is het geen probleem als dit verschil in hashes niet op te lossen
is (commandline <> web). Ik wil het namelijk graag gebruiken in contact
formulieren (iets dergelijks als The Moose uitlegde in de thread
"Gastenboek-spamscript"), om een hash te maken van een hidden (HTML) invoer
veld en dit te vergelijken met een in het script opgegeven waarde.
Zodoende zou het script alleen uitgevoerd moeten worden als de strings
met elkaar overeenkomen.

--
Met vriendelijke groet / Best regards,
Jan Reilink, VEVIDA Nederland BV

Postbus 329, 9700 AH GRONINGEN, +31(0)50 - 5492234

Jan Reilink
15/02/06, 20:00
On 2006-02-15, Jan Reilink <janreilink@vevida.com> wrote:
> Kan iemand mij misschien in de juiste richting wijzen? ik heb een perl
> module geinstalleerd ("Digest::MD5::File" en "Digest::Perl::MD5") en ik
> ben op zoek naar een methode om een 'gewone' md5sum van een string te
> krijgen. Dus geen hexadecimale, geen binary, geen base64. De output zou
> gelijk moeten zijn aan de commandline:
>
> $ cat bla
> abc123
> $ md5sum bla
> 2c6c8ab6ba8b9c98a1939450eb4089ed bla
>
> Terwijl de output via het web is:
> e99a18c428cb38d5f260853678922e03
>
> De gebruikte code staat als voorbeeld in de documentatie:
> use Digest::Perl::MD5 'md5_hex';
> print 'Digest is ', md5_hex('abc123'), "\n";
>
> De Digest::SHA1 module geeft exact hetzelfde probleem.
>
> Opzich is het geen probleem als dit verschil in hashes niet op te lossen
> is (commandline <> web). Ik wil het namelijk graag gebruiken in contact
> formulieren (iets dergelijks als The Moose uitlegde in de thread
> "Gastenboek-spamscript"), om een hash te maken van een hidden (HTML) invoer
> veld en dit te vergelijken met een in het script opgegeven waarde.
> Zodoende zou het script alleen uitgevoerd moeten worden als de strings
> met elkaar overeenkomen.
>

Zat er /toch/ een regeleinde in 'bla'... Probleem opgelost.

--
Met vriendelijke groet / Best regards,
Jan Reilink, VEVIDA Nederland BV

Postbus 329, 9700 AH GRONINGEN, +31(0)50 - 5492234

robert
15/02/06, 20:00
Jan Reilink <janreilink@vevida.com>:
> Kan iemand mij misschien in de juiste richting wijzen? ik heb een perl
> module geinstalleerd ("Digest::MD5::File" en "Digest::Perl::MD5") en ik
> ben op zoek naar een methode om een 'gewone' md5sum van een string te
> krijgen. Dus geen hexadecimale, geen binary, geen base64. De output zou
> gelijk moeten zijn aan de commandline:
>
> $ cat bla
> abc123
> $ md5sum bla
> 2c6c8ab6ba8b9c98a1939450eb4089ed bla
>
> Terwijl de output via het web is:
> e99a18c428cb38d5f260853678922e03
>
> De gebruikte code staat als voorbeeld in de documentatie:
> use Digest::Perl::MD5 'md5_hex';
> print 'Digest is ', md5_hex('abc123'), "\n";

In de file staat vast een newline, en die neem je in het bovengenoemde
voorbeeld niet mee:
$ echo abc123 | md5
2c6c8ab6ba8b9c98a1939450eb4089ed
$ echo -n abc123 | md5
e99a18c428cb38d5f260853678922e03

De eerste MD5 is de hash over de string *inclusief* newline, de twee
*exclusief* newline.

--
robert