2009-04-03 7 views
3

Je dois créer une méthode de hachage simple pour transmettre des données dans une URL. Il n'a pas besoin d'être très sécurisé, cela ne devrait pas être évident pour la plupart des gens.Besoin d'un hachage simple en PHP

Le hachage doit contenir l'identifiant numérique de l'expéditeur et l'identifiant du destinataire et je devrais pouvoir décoder les données après avoir lu le hachage ajouté.

Des idées? Je voudrais que le hash soit le plus court possible, simplement parce que cette URL est destinée à être partagée via IM, email, etc.

Répondre

7

Le hash est unidirectionnel seulement. Si vous voulez le décrypter, vous devez le crypter. Essayez mcrypt avec one of these.

Pour les choses non sécurisées, vous pouvez essayer base64_encode, Vous pouvez également base_convert chaque identifiant numérique de 10 à 36 chiffres ou plus. Multiplier les nombres avec une constante secrète pourrait également aider.

$obscurity = base_convert($recipientId * 42, 10, 36) . ':' . base_convert($senderId * 42, 10, 36) 
1

Vous pouvez utiliser le cryptage, comme mentionné par @OIS. Vous pouvez également utiliser un hachage et stocker les valeurs de hachage dans une base de données associée à l'ID de l'expéditeur et à l'ID du destinataire. PHP a md5() et sha1() intégré.

+0

MD5 et SHA1 ne peut pas être (facilement) décodé à l'autre extrémité. –

+1

C'est pourquoi il a suggéré de stocker les valeurs de hachage dans une base de données associée aux identifiants de l'expéditeur et du destinataire. Ce n'est peut-être pas la meilleure solution, mais cela fonctionnerait. Upvoted pour contrer le downvote inutile. –

2

Essayez le codage/décodage base64. mis en place avec l'option apache « Multiviews » ou apache mod_rewrite, rendrait vos urls ressemblent:

http://mysite.com/messages/[encoded string here] 
2

base64 devrait certainement faire l'affaire si vous voulez le décoder à nouveau. Notez que ce n'est pas un 'hachage', un hachage signifie généralement un cryptage unidirectionnel.

 
$senderId = 1234; 
$recipientId = 5678; 
$myString = $senderId . ":" . $recipientId; 
echo base64_encode($myString);