MySQL Verbindungsdaten 'auslagern'?

chrjs

Mitglied
Hallo,

ich versuche derweil folgendes in Java umzusetzen:

In einer XML Datei sollen alle Daten für die Verbindung zum jeweiligen Datenbankserver zur Verfügung stehen.
Hierbei möchte einen MD5 Hash aus diesem Passwort machen und ihn anschließend als Base64 speichern.

Mein Problem ist nun, dass ich nicht genau weiß, wie ich das in Java umsetzen kann. (In .NET habe ich so etwas schon.)

In Java hänge ich bereits im Encodieren:
Java:
 MessageDigest md = MessageDigest.getInstance("MD5");
  byte[] md5hash = new byte[32];
  md.digest(Text.getBytes("UTF-8"),0, Text.length());
  md5hash = md.digest();

  return new BASE64Encoder().encode(md5hash);
Hier kommen komplett andere Ergebnisse raus, als in meiner .NET Lösung.

Java = 1B2M2Y8AsgTpgAmY7PhCfg==
.NET = bdNVM0/eECsrwWHzcij/TaLE2XMR0AkFqkzTD66xB1TTX6d8Ixd7AqjivfuAC4ox

Anbei noch mal meine .NET Lösung für das Encodieren:
nopaste.info - free nopaste script and service

Wie kann ich die gewünschten Ergebnisse erhalten? Wie würde die Dekodierung von statten gehen?
 
G

Gast2

Gast
Was bringt es dir das DB passwort als md5 hash abzulegen?
Du müsstest es doch wenn du dich verbinden willst wieder in klartext umwandeln, und das geht mit deinem Hash doch nicht?

EDIT:
Hab nicht alles gelesen:
Wie würde die Dekodierung von statten gehen?
Gar nicht! ;)
 

Foermchen82

Top Contributor
Was bringt es dir das DB passwort als md5 hash abzulegen?
Du müsstest es doch wenn du dich verbinden willst wieder in klartext umwandeln, und das geht mit deinem Hash doch nicht?

EDIT:
Hab nicht alles gelesen:

Gar nicht! ;)

Das sollte man aber machen, da Passwörter nicht im klartext gespeichert werden sollten. Du brauchst es auch nicht zu dekodieren, da du einfach dann die Usereingabe in einen Hash umwandelst und die Hashes vergleichen kannst
 
G

Gast2

Gast
Das sollte man aber machen, da Passwörter nicht im klartext gespeichert werden sollten. Du brauchst es auch nicht zu dekodieren, da du einfach dann die Usereingabe in einen Hash umwandelst und die Hashes vergleichen kannst
Es geht hier um eine Verbindung zur Datenbank. Das Passwort musst du der Datenbank als plaintext übergeben, ergo müsstest du den MD5 Hash dekodieren was so ohne weiteres nicht möglich ist.

Dein Vorschlag macht nur sinn wenn es sich um ne Art login handelt, d.h. der User gibt nen passwort ein, das Programm vergleicht das passwort (beides als md5 hash) und sagt ja/nein.
 

Foermchen82

Top Contributor
Es geht hier um eine Verbindung zur Datenbank. Das Passwort musst du der Datenbank als plaintext übergeben, ergo müsstest du den MD5 Hash dekodieren was so ohne weiteres nicht möglich ist.

Dein Vorschlag macht nur sinn wenn es sich um ne Art login handelt, d.h. der User gibt nen passwort ein, das Programm vergleicht das passwort (beides als md5 hash) und sagt ja/nein.

Ah richtig. Das hab ich überlesen. Dann kann ich dir zustimmen: MD5 Hash zu dekodieren geht nicht
 

Foermchen82

Top Contributor
Ah jetzt versteht ich auch was sein Fehler ist:

es wird kein MD5 hash aus dem Passwort erzeugt, sondern ein MD%-Hash aus "chris". Mit diesem wird dann die XML Datei verschlüsselt. Das kann man dann auch dekodieren. Versuch es mal damit!
 

chrjs

Mitglied
Ich komme einfach nicht dahinter. :noe:
Das könnte daran liegen, dass der Code nicht 1000%ig verstanden wurde, oder aber einfach an meinen anscheinend recht geringen Java Kenntnissen. Dennoch möchte ich dieses Projekt gerne umsetzen, ich will ja was daraus lernen.
Wie dem auch sei, mein aktuelles Problem besteht darin, dass ich es nicht hin bekomme einen MD-% Hash zu verwenden.
Java:
MessageDigest md = MessageDigest.getInstance("chrjs");
-> java.security.NoSuchAlgorithmException: chrjs MessageDigest not available.
Java:
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] md5hash = new byte[32];
md.digest(Text.getBytes("chrjs"),0, Text.length());
-> java.io.UnsupportedEncodingException: chrjs
Das ist für mich so weit auch nachvollziehbar, keine Frage. Bisher habe ich leider auch nichts zu MD-% Hashes gefunden, bzw. wie diese in Java angewandt werden.

Danke & Gruß,
Chris
 

Foermchen82

Top Contributor
Ich denke mal, dass "Text" dein zu verschlüsselnder Text sein soll. also hast du ihn da falsch verwendet. Wenn "Chris" dein Key sein soll für die Md5 verschlüsselung muss es so heißen:

[Java]
md.digest("chrjs".getBytes());
[/Java]
 

chrjs

Mitglied
Es scheint mir, als würde er nun mit
Java:
md5hash = md.digest("chrjs123".getBytes());
den Wert "chrjs123" hashen. Denn mein Hash der ausgegeben wird, ändert sich nur, wenn ich diesen Teil ändere.

Hier noch mal der komplette Code.
Java:
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] md5hash = Text.getBytes();
//md.digest("chrjs".getBytes("UTF-8"),0, Text.length());
md.digest("chrjs123".getBytes());
md5hash = md.digest("chrjs123".getBytes());

return new BASE64Encoder().encode(md5hash);

Eijeijei...:oops:
 

Foermchen82

Top Contributor
Ja logisch. Er erzeugt dir einen Hash-Key. Diesen musst du bei der Verschlüsselung deiner Daten dann verwenden. schau dir hierzu mal die Ver- und Entschlüsselung von Daten in Java an
 

Ähnliche Java Themen


Oben