Etwas in meinem Hinterkopf sagt mir, dass ich etwas offensichtlich hier vermisse.MessageDigest MD5 Algorithmus gibt nicht zurück, was ich erwarte
Ich integriere ein vorhandenes Java-Projekt mit einer API von Drittanbietern, die einen MD5-Hash eines API-Schlüssels für die Authentifizierung verwendet. Es funktioniert nicht für mich, und beim Debuggen wurde mir klar, dass die erzeugten Hashes nicht mit den Beispielen übereinstimmen, die sie geliefert haben. Ich habe einige Websites gefunden, die MD5-Hashes aus Strings erstellen, um ihre Beispiele zu überprüfen, und soweit ich das beurteilen kann, liege ich falsch und sie haben Recht.
zum Beispiel, nach erzeugt die Zeichenfolge "Hallo" einen Hash von "5d41402abc4b2a76b9719d911017c592". (FWIW Ich weiß nichts über diese Website, außer dass sie die Beispiele, die ich habe, richtig zu hacken scheint). Wenn ich es durch meinen Code ausführen ich:
XUFAKrxLKna5cZ2REBfFkg ==
Hier ist die einfache Methode ist, ich bin mit dem MD5-Hash/string zu erzeugen .:
private String md5(String md5Me) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
md.reset();
md.update(md5Me.getBytes("UTF-8"));
return Base64.encodeBase64String(md.digest());
}
benutzte ich einen sehr ähnliche Methode zur erfolgreichen Authentifizierung einer anderen API unter Verwendung des SHA1-Algorithmus letzte Woche. Ich frage mich, ob das Problem mit der org.apache.commons.net.util.Base64.encodeBase64String ... Jede Hilfe wird sehr geschätzt, wenn nur einige Tests zu sehen, ob das ByteArray korrekt ist, aber die konvertierte Zeichenfolge falsch ist .
md.digest() sollte Bytes enthalten, die Sie suchen, Sie codieren sie weiter mit Base64-Algorithmus und erhalten unterschiedliches Ergebnis – hoaz
Ich muss diese Bytes in einen String für eine HTTP-Anfrage konvertieren, gibt es eine bessere Möglichkeit, das zu tun ? – eric
new String (byte [] bytes) – Andy