PHP MD5 hash

Pagina: 1
Acties:
  • 237 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
Weet precies hoe het werkt wil alleen weten hoe ik van een complete directory plus sub directory's 1 hash kan maken. 1 bestand of string is geen probleem.

Ik ben er net al een tijd mee bezig geweest alleen ik zit volgens mij net niet in de correcte richting te denken. via recursie pak ik alle bestanden stop ik in een array en vervolgens de totale bestandsgrootte hieruit berekenen en hiervan een md5 hash te maken. Ik denk alleen niet dat dit de correcte methode is.

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Wat is je definitie van "correcte methode?" Oftewel, waarom zou jouw methode niet correct genoeg zijn? Wat is je doel?

Let natuurlijk op de gevallen dat de (hoogste) directory er eerst zo uitzag:

code:
1
2
3
naam1    (=dir)
   naam2 (=file)
naam 3   (=file)


en later zo
code:
1
2
3
naam1    (=file)
naam2    (=dir)
   naam3 (=file)


Ook als je de filesize optelt hou je natuurlijk geen rekening met twee tegengestelde wijzigingen (ene file 1 byte langer, een andere file 1 byte korter).

[ Voor 3% gewijzigd door Sendy op 19-06-2006 16:58 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Wat is je doel?

Uit wat je nu omschrijft krijg ik het idee dat je enkel van het aantal bytes een hash maakt, niet van de bytes zelf. Bij jou methode hoef ik enkel te weten wat de totale hoeveelheid bytes van alle bestanden is. 1 bestand van deze grootte maken en vervolgens heeft deze dezelfde hash.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
gaat er gewoon om dat de geleverde package in php gechecked kan worden op uniekheid via md5. En ik denk niet dat mijn methode dat doet, kan het fout hebben, maar daarom vraag ik het maar even.

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Tja, dat lijkt me volkomen duidelijk. Waarom maak je geen md5 van de inhoud van je package?

Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
daarom is mijn vraag ook hoe maak ik een hash van meerdere bestanden.

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ik vind het zo'n vreemde vraag. Je zegt dat je van 1 bestand en van een string een hash weet te maken. Waarom heb je dan ineens zo'n moeite met meerdere bestanden? Je kunt de inhoud van twee bestanden toch achter elkaar in dezelfde string gooien en hier een hash over berekenen? Als je bang bent dat het te lang wordt zou je ook de hashes van elk bestand achter elkaar kunnen zetten en hier vervolgens een hash van maken. Op die manier bereken je de hash over de inhoud van alle bestanden, en niet de afmeting.

Het enige waar je dan op moet letten is dat je de bestanden telkens in dezelfde volgorde zet.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Janoz, de inhoud van twee bestanden achter elkaar gooien gaat niet per definitie goed. Neem bijvoorbeeld één bestand met als enige inhoud "1" en een ander bestand met als inhoud "2". Plak deze aan elkaar en vergelijk de md5 met de md5 van een bestand met inhoud "12" ;)

edit:
Je zal voor het TS geval wel gelijk hebben, maar ik zou dat "iig" niet zo stellig stellen.


Maar goed, het is veel simpeler. Neem gewoon het pakketje. Meestal is dat een gegzipte tar die je prima kan gebruiken om een md5 van te nemen.

[ Voor 16% gewijzigd door Sendy op 19-06-2006 17:22 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Klopt, het was een wat korte oplossing. Het werkt iig beter dan een hash nemen over het totaal aantal bytes van alle bestanden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Kwak het in een ZIP/TAR en rag die door md5_file() ?

Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

Topicstarter
frickY schreef op maandag 19 juni 2006 @ 17:26:
Kwak het in een ZIP/TAR en rag die door md5_file() ?
wanneer ik dat doe kan ik niet ter plekke van de betreffende bestanden de md5 hash ervan checken en zou ik eerst weer alles moeten zippen.

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
aex351 schreef op maandag 19 juni 2006 @ 16:53:
Ik ben er net al een tijd mee bezig geweest alleen ik zit volgens mij net niet in de correcte richting te denken. via recursie pak ik alle bestanden stop ik in een array en vervolgens de totale bestandsgrootte hieruit berekenen en hiervan een md5 hash te maken. Ik denk alleen niet dat dit de correcte methode is.
Je stopt alle bestanden al recursief in een array en vervolgens ga je de bestandsgrootte uitrekenen.. Waarom de neuk pak je ipv moeilijk doen met filesize() etc niet gewoon de inhoud van 't bestand met file_get_contents()?
Vervolgens plak je alle hashes achter elkaar zoals Janoz ook al zei en bereken je daar de hash van, voila, 1 hash voor alles :)
En voor de volgorde heb je meer dan genoeg sorteer-functies voor arrays :)

[ Voor 15% gewijzigd door Osiris op 19-06-2006 17:38 ]


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Kan je niet een lijst van bestanden ophalen, deze sorteren ( sort(); ) en dan dat allemaal aan elkaar plekken, en dan md5 uitvoeren?

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
snake903. Kan je nu echt geen voorbeeld bedenken waar dit niet zou werken?

Acties:
  • 0 Henk 'm!

  • Mr. Bondt
  • Registratie: Februari 2005
  • Laatst online: 27-08 14:50
md5_file() in combinatie met glob()?
En inderdaad iets met de file inhoud doen ;)

[ Voor 17% gewijzigd door Mr. Bondt op 19-06-2006 17:45 ]


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
snake903 schreef op maandag 19 juni 2006 @ 17:40:
Kan je niet een lijst van bestanden ophalen, deze sorteren ( sort(); ) en dan dat allemaal aan elkaar plekken, en dan md5 uitvoeren?
Dan heb je alsnog maar een hash van de filenames, even 'nuttig' als een hash van de filesize lijkt me.

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Ik zou een md5 over de lijst met md5's doen. Dus voor iedere file een md5; deze allemaal achter elkaar plakken en daar een md5 van trekken :) Dan heb je alle voordelen wel te pakken lijkt me :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Spider.007 zegt het goed of geeft in ieder geval een leuke oplossing:

code:
1
2
3
4
5
6
$a = md5(level0_dir_name);
$b = $a;
for(every subdir...) {
    $b .= md5(level1_subdir_name);
}
return md5($b);


Op deze wijze heb je een aardig unieke hash, lijkt me. Zoniet, vraag je af hoe veilig het dan wel moet zijn. Verwerk er extra data in, zoals het aantal files per dir (en verwerk dat ook in je hash), etc.

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Osiris schreef op maandag 19 juni 2006 @ 17:45:
[...]

Dan heb je alsnog maar een hash van de filenames, even 'nuttig' als een hash van de filesize lijkt me.
Natuurlijk niet md5 over de filename/filesize trekken, maar over het bestand zelf; md5_file()
Pagina: 1