md5() : paramètre raw_output

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : md5() : paramètre raw_output

par FloBaoti » 13 févr. 2007, 08:08

Oki, merci à toi pour toutes ces infos :wink:

@++

par naholyr » 12 févr. 2007, 23:56

Aucun intérêt d'utiliser le raw_output dans la plupart des cas, ça n'a d'intérêt que si l'espace disque est vraiment critique, parce que franchement économiser 16 octets par somme, ce sont des économies de bout de chandelles, du moins ça ne vaut pas le risque encouru : un passage de la base d'ISO-8859-1 en UTF-8 par exemple fera sauter toutes tes sommes MD5 par exemple.

Autant rester avec l'encodage hexa ;)

par FloBaoti » 12 févr. 2007, 23:37

Merci pour ces explications.

Dans la pratique, le fait que le caractère ASCII NULL soit possible pose un réel problème ? Si PHP ou MySQL le rencontre, ils vont prendre ça pour une fin de chaine ?
Donc en bref, est-ce que ça peut-être conseillé d'utiliser ce raw_output ou pas du tout ?

Et au niveau MySQL, peut importe le type de l'attribut ?

Merci,
@++

par naholyr » 12 févr. 2007, 23:30

Un MD5 est une suite de 128 bits.
128 n'est divisile que par des puissances de 2.

128 = 8x16, donc en groupant les bits 8 par 8, on obtient 16 groupes d'octets, soit 16 caractères. Sauf que ça inclut n'importe quel caractère dont celui de code ASCII 0 (qui signifie théoriquement fin de chaîne) et tous les caractères de code > 127 (et donc pas «standard»).

On pourrait alors grouper par paquets de 7 bits pour rester dans les caractères standard, voire 6 bits pour être sûr de restreindre suffisamment tout en excluant le caractère nul. Sauf que 128 n'est divisible ni par 7 ni par 6, on se retrouverait avec un reste, c'est pas très propre.

On peut donc simplement grouper par paquets de 4, on obtient alors 32 groupes de 4 bits de valeur 0 à 16, soit 32 caractères hexadécimaux. Bien sûr cette chaîne prend du coup 2x plus de place puisque les caractères (héxadécimaux ou non) représentent un octet, mais au moins on est sûr d'utiliser une plage qui ne pose aucun problème : [0-9a-f]

md5() : paramètre raw_output

par FloBaoti » 12 févr. 2007, 22:44

Salut à tous!

Je viens de découvrir un paramètre de la fonction md5() implémenté sur PHP5.
Il s'agit de raw_output.

Exemple: la chaine 'blabla' donne:
raw_output=FALSE : df5ea29924d39c3be8785734f13169c6
raw_output=TRUE : ß^¢™$Óœ;èxW4ñ1iÆ

J'aimerais un peu plus d'informations sur ce paramètre. Notamment:
- Comment se fait-il que la chaine obtenu soit exactement 2 fois plus courte qu'un MD5 habituel (16 caractères contre 32)
- Quel est l'avantage d'avoir un raw_output ?
- Dans le but de stocker dans une base de donnée MySQL, quel type de champ dois-je utiliser pour stocker une telle "chaine" ? du BINARY ?
- Dans le but de gagner ainsi de la place disque sur une application utilisant beaucoup de hash MD5 (disons plus de 10k en constante augmentation), quels sont les limites, s'il y en a, de cette méthode ?

Ca m'étonne beaucoup cette taille divisée par 2, donc je me pose beaucoup de questions sur l'interêt réel et les limites.
Généralement quand on gagne tant de place, il y a des limites ...

Merci à ceux qui pourront m'éclairer :wink:

@++