2010-02-09 17 views
1

J'essaie de Sip Register et je reçois le défi du serveur.Java MD5 dont l'un est correct?

J'ai donc besoin d'utiliser l'algorithme MD5 sur le nonce, puis l'envoyer au serveur pour s'authentifier.

J'ai rencontré deux exemples de cryptage MD5 et j'ai essayé les deux et chacun me donne une chaîne différente, donc je me demandais quel est le bon à utiliser?

Merci à l'avance

EDIT:

Ok merci pour les codecs communes.

Je l'ai édité parce que je dois encoder la valeur de nonce que je reçois du serveur avec mon nom d'utilisateur et mot de passe pour le renvoyer.

Il s'agit donc d'un type particulier d'encodage pour l'enregistrement SIP. Quelqu'un peut-il pointer vers un tutoriel sur la façon de procéder? Ou avez-vous des indices?

+3

FYI: MD5 est un * hash *, pas un * chiffre * –

Répondre

2

Les deux sont incorrects. Votre conversion du tableau d'octets en chaîne hexadécimale est interrompue. Je recommande fortement d'utiliser http://commons.apache.org/codec/ de la peste porcine africaine qui peut le faire pour vous:

Hex.encodeHexString(yourByteArray); 

Mais si vous utilisez commons-codec, vous pouvez aussi le faire:

String sessionid = "1ddfdf99abfe5690dc1243875"; 
String md5HexString = DigestUtils.md5Hex(sessionid); 

et vous avez terminé . Neat, n'est-ce pas? :-)

+0

Quel est le meilleur moyen de le faire sans utiliser le codec commun? Je ne sais pas sur la licence du codec commun –

+1

Apache Commons sont liceneced sous la licence Apache qui ne devrait pas causer de mal. http://commons.apache.org/license.html ou, si vous préférez l'entrée Wikipedia sans legalse: http://en.wikipedia.org/wiki/Apache_License – Malax

1

Un problème évident avec le premier est que vous produisez la chaîne hexagonale dans le mauvais sens. Lorsqu'une valeur dans messageDigest est inférieure à 16, vous produisez une chaîne hexadécimale à un chiffre (par exemple A) au lieu d'une chaîne à deux chiffres (0A).