Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo zusammen,

bin das erstemal dabei in Java ein Applet zu schreiben welches einen Login erfodert. Dabei hab ich in der Datenbank (MySQL) die Passwörter natürlich verschlüsselt (md5). Wenn ein Benutzer sich nun anmelden will muss ich das eingegebene pw von ihm natürlich "umwandeln" um die Hashs zu vergleichen. und genau das bringt mich zu meiner Frage.

Gibt es in Java keine Methode um einen String in einen md5 Hash umwandeln zu können, oder bin ich einfach zu doof um richtig zu googeln?

Schonmal vorab danke für die Hilfe.

Gruß

Ionman

Ich denke 2teres :D (Nicht ernst nehmen)

import java.security.*;

class MD5 {

    public static void main(String[] args) throws Exception {

        /* Berechnung */

        MessageDigest md5 = MessageDigest.getInstance("MD5");

        md5.reset();

        md5.update(args[0].getBytes());

        byte[] result = md5.digest();


        /* Ausgabe */

        StringBuffer hexString = new StringBuffer();

        for (int i=0; i<result.length; i++) {

            hexString.append(Integer.toHexString(0xFF & result[i]));

        }

        System.out.println("MD5: " + hexString.toString());

    }

}

MessageDigest (Java 2 Platform SE v1.4.2)

Nimmt halt nur Byte bzw Bytearrays entgegen und keine Strings.

Warum so kompliziert, wenn Du eh ein SQL Select erzeugen musst, dann kannst Du auch die Datenbank dazu verwenden den Hash zu erzeugen:

Select count(*) from mytable where username=? and userpass=md5(?)

Das ganze in ein Prepareobjekt rein und ausführen lassen. Wenn ein Resultset existiert, d.h. User und Passwort sind korrekt. Das das Resultset Null bzw enthält keine Records, dann stimmt entweder Benutzername und/oder Passwort nicht

Phil

Select count(*) from mytable where username=? and userpass=md5(?)

Ist natürlich auch möglich, aber danach wurde ja nicht gefragt.

Aber aus 'Sicherheitsaspekten' ist das natürlich auch nicht so schön da es dann zwischen Java + SQL-Server klartext rumschwirrt.

Dank euch beiden für die Hilfe. Hab nun den von DominikJ vorgeschlagenen Weg eingeschlagen. Und nach ein paar wenigen Anpassungen Funktioniert das ganze Wunderbar.

Sodele damit begehbe ich mich mal wieder in die weiten des Internets und suche über google mal nach einem Tutorial wie man richtig Googelt.

In diesem Sinne früh vorweg ein schönes Wochenende

ok nun hab ich doch Festgestellt das es ein Problem gibt und ich steig einfach nicht dahinter.

Die Verschlüsselung wurde von md5 auf sha1 geändert. Also denk ich mir naja einfach mal anstatt

MessageDigest sha = MessageDigest.getInstance("MD5");
MessageDigest sha = MessageDigest.getInstance("SHA1");
einfügen. Der rest sollte eigentlich gleich von statten gehen. Gebe ich zu Beispiel test ein erstellt er mir jedesmal einen anderen Hash Wert sobald ich die Fenstergröße verändere. Also wenn er zuvor mit 4f20 angefangen hat kann es nach der größen Veränderung sein das es mit b5f2 losgeht. Ich kann ausschliessen das es daran liegt das die Variable welches das Passwort beinhaltet, jedesmal einen anderen Wert hat. Der Wert bleibt auch gleich bei selber Fenster Größe. Hier mal der Code:

String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname; 

conn = DriverManager.getConnection(url, user, password); 

ResultSet rs = conn.createStatement().executeQuery( "SELECT `ID` FROM `user` WHERE `Username` LIKE '"+name+"';


StringBuffer hexString = new StringBuffer();

while ( rs.next() ) {

	String id = rs.getString("ID");

	String pw = passwordeintragen.toString();

	try {

		MessageDigest sha = MessageDigest.getInstance("SHA1");

		sha.reset();

		sha.update(pw.getBytes());

		byte[] result = sha.digest();


		for (int i=0; i<result.length; i++) {

			hexString.append(Integer.toHexString(0xFF & result[i]));

		}


		fuehler.setText(hexString.toString());

	}

	catch (NoSuchAlgorithmException d) {

		fuehler.setText(d.toString());

	}

Da fehlt ein "-".

MessageDigest unterstützt:

- MD2

- MD5

- SHA-1

- SHA-256

- SHA-384

- SHA-512

Habs grad eben versucht und brachte keinen unterschied. Sobald ich wieder die Fenstergröße Verändert habe wurde ein komplett andere Wert Berechnet.

byte[] textBytes = "Franz jagt im komplett verwahrlosten Taxi quer durch Bayern".getBytes();

		MessageDigest md = MessageDigest.getInstance("SHA-1");

		md.update(textBytes);

		byte[] digest = md.digest();

		for (byte b : digest) {

			out.printf("%02x", b & 0xff);

		}

Hab das ganze mal 1:1 (bis auf Variable) so übernommen und habe immernoch die für mich auf jedenfall Schlechte Nachricht das es keine Veränderung gebracht hat.

Falls noch Ideen vorhanden wäre ich auf jedenfall Dankbar.

DominikJ danke dir auf jedenfall schonmal für die bissherige Hilfe.

Dann liegt es zu 100% an deiner Variable!

... was is denn eigentlich passwordeintragen ?

passwordeintragen ist ein JPasswordField.

Nun gut wenn es an meiner Varaible liegt dann werd ich da mal schaun.

Nur warum kommt auch jedesmal wenn ich es Jungfräulich starte dann ebenfalls ein komplett anderer Hash Wert?

passwordeintragen ist ein JPasswordField.

Dann mach mal anstatt .toString() nen .getText() daraus ...

toString gibt dir das Objekt aus ...

ah guter Tip.

Vielen dank endlich klappt es und ich kann Seelenruhig zum nächsten Problem hinarbeiten.

Und da dies für heute mein Letzter Post war einmal ein schönes Wochenende an alle.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.