Toon posts:

[VB.NET] Equivalentie van Perl's 'unpack'

Pagina: 1
Acties:

Verwijderd

Topicstarter
hoe zou je de volgende perl statements in vbcode omzetten?
code:
1
2
my $digest = md5($data[3] . $Password) . md5($Password);
                      $digest = unpack("H" . length($digest), $digest);

ik snap niet helemaal wat die unpack functie doet nl :? (en ja, ik heb gezocht)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Het is nogal vreemde code, aangezien md5() een string op lijkt te leveren die vervolgens (met unpack) omgezet wordt naar een integer-waarde. Het lijkt mij logischer wanneer die functie gewoon een integer-waarde op zou leveren.

Als je in Visual Basic een MD5-functie hebt die wel gewoon de code oplevert als 32-bits getal, kun je de werking van de Perl code zo simuleren:
code:
1
  digest = md5 (data + password) + (md5 (password) << 32)

In plaats van '<< 32' zou je ook met 4294967296 kunnen vermenigvuldigen. Ik kan geen Visual Basic programmeren, dus ik heb geen idee of je (of hoe je) moet bitshiften.

Sowieso moet VB ondersteuning leveren voor 64-bits getallen, anders gaat 't mis, aangezien elk van de md5-codes uit 32-bits bestaat.

Verwijderd

Topicstarter
kan je wat meer toelichten wat er precies moet gebeuren, want ik kom er nu nog steeds niet uit...

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Op woensdag 24 april 2002 17:36 schreef KoekenBoes het volgende:
kan je wat meer toelichten wat er precies moet gebeuren, want ik kom er nu nog steeds niet uit...
Misschien moet ik maar Visual Basic gaan leren, dan kan ik het beter voorkauwen.

Wat snap je nu niet dan? Want hier kan ik natuurlijk niets mee.

Verwijderd

Topicstarter
het hoeft niet persee in vb (java/php/whatevert mag ook), ik moet eigenlijk alleen weten wat er nu precies gebeurt met dat unpacken. Heb niet zoveel kaas gegeten van shiften met bitjes...

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Ok, dan doe ik het in Perl ;)

Maar serieus. Ik suggereerde dat je die hele unpack wel over kon slaan, als je een md5() functie hebt die gewoon een integer retourneert (zoals gebruikelijk is).

Als je per sé wil weten wat die unpack doet: die decodeert een aantal (gelijk aan de lengte van 'digest') hexadecimale karakters naar de scalaire waarde van die hexadecimale karaters.

Als digest bijvoorbeeld 'ABCD' is, dan wordt de aanroep feitelijk unpack('H4','ABCD'), wat dus 439810 oplevert. ABCD wordt dus naar een decimaal getal geconverteert. Omrekenen van/naar het hexadecimale getallenstelsel ga ik hier niet uitleggen, daar zijn al tig topics over geweest.
Verder is de punt (.) operatie in Perl gewoon stringconcatenatie (misschien was dat nog onduidelijk).

Verwijderd

Topicstarter
Top! hier kan ik wat meer mee. Het lijkt me dat hier al functionaliteit voor is in VB.NET eerlijk gezegd, maar nog niet kunnen vinden.

Maar wat ik niet begrijp is dat jij zegt dat md5 een integer returnt, want in mijn geval is het een string met allerlei tekens en cijfers...

Die stringconcatenatie kende ik wel ja ;) Kan wel een heeel klein beetje perrelen, maar heb er alleen nog niet zo heel vaak mee gewerkt.

  • Grum
  • Registratie: Juni 2001
  • Niet online
Ik snap het probleem niet echt ;) (en soultaker .. je eerst post is foutjes met je 64 bits integers :D)

Je hebt alleen een md5 functie nodig die een string returned (van 32 chars) ipv een integer, nu lijkt me dat dat toch wel vindbaar is .. zelfs in .NET :)

Verwijderd

Topicstarter
zelfs in .NET
over het algemeen is de documentatie van .NET erg goed hoor :)

maar zoals het nu in m'n vb appje werkt (ben aan het proberen om de perl MSN-client om te zetten naar VB.NET) krijg ik een string terug na de md5 operatie: 5C-42-EB-F6-A3-06-25-83-0E-4E-B3-61-5B-CA-2D-7393-06-23-A4-18-B4-39-3E-DF-23-3F-BE-24-30-0F-F7 (dat is dus wat digest op het moment bevat)

zit ik dus nu meteen goed of moet er nog wat met deze string gebeuren?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Op woensdag 24 april 2002 18:04 schreef Grum het volgende:
(en soultaker .. je eerst post is foutjes met je 64 bits integers :D)
Ach, inderdaad. MD5 is natuurlijk 128 bits. Ik was in de war met CRC-32, denk ik. :)

Dan is een MD5 functie die een string returned ook niet zo vreemd meer, hoewel Perl zelf geen moeite heeft met belachelijk grote integers.

  • Grum
  • Registratie: Juni 2001
  • Niet online
Op woensdag 24 april 2002 18:11 schreef KoekenBoes het volgende:

over het algemeen is de documentatie van .NET erg goed hoor :)

maar zoals het nu in m'n vb appje werkt (ben aan het proberen om de perl MSN-client om te zetten naar VB.NET) krijg ik een string terug na de md5 operatie: 5C-42-EB-F6-A3-06-25-83-0E-4E-B3-61-5B-CA-2D-7393-06-23-A4-18-B4-39-3E-DF-23-3F-BE-24-30-0F-F7 (dat is dus wat digest op het moment bevat)

zit ik dus nu meteen goed of moet er nog wat met deze string gebeuren?
Tja .. probeer het zelf ff ? >:)

Btw zover ik weet heeft een msnclient geen 64-chars lange 2 aan elkaar geconcatte md5strings nodig hoor :)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Op woensdag 24 april 2002 18:11 schreef KoekenBoes het volgende:
maar zoals het nu in m'n vb appje werkt (ben aan het proberen om de perl MSN-client om te zetten naar VB.NET) krijg ik een string terug na de md5 operatie: 5C-42-EB-F6-A3-06-25-83-0E-4E-B3-61-5B-CA-2D-7393-06-23-A4-18-B4-39-3E-DF-23-3F-BE-24-30-0F-F7 (dat is dus wat digest op het moment bevat)

zit ik dus nu meteen goed of moet er nog wat met deze string gebeuren?
Nou, die streepjes tussendoor (behalve waar je de twee codes aan elkaar geplakt hebt) lijken me niet zo handig als je nog wat met die MD5 string moet doen, maar behalve dat kan ik natuurlijk niet beoordelen of deze representatie geschikt is voor wat jij er mee wilt doen.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Check mijn laatste post in het codebase topic, dit doet volgens mij wat je wil.
(weliswaar in C#, maar dat is nu makkelijk over te zetten *D)
Pagina: 1