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,

ich habe folgendes Problem:

eine Klasse Person stellt in meinem Programm die Benutzer dar. Diese loggen sich über einen Anmeldedialog ein.

Das ganze funktioniert jetzt mit unverschlüsseltem Passwort - ich würde das aber gern mit md5 verschlüsseln (warum ich kein unverschlüsseltes Passwort haben möchte, dürfte klar sein und md5 erscheint mir als sicher genug)

dazu habe ich jetzt folgende Funktion geschrieben:


    private String getEncryptedPassword(String pwd) {

    	if (pwd != null) {

    		try {

                byte[] md5pwd = MessageDigest.getInstance("MD5").digest(

                        pwd.getBytes());

                return md5pwd.toString();

            } catch (NoSuchAlgorithmException ex) {

                ex.printStackTrace();

            }

    	}

		return null;

    }

Problem ist jetzt nur, dass jedesmal wenn ich auf ok (im Anmeldedialog) klicke das verschlüsselte Passwort anders ist...

Für ein Password hab ich jetzt z.B. diese Passwörte:

[b@2b9406

[b@7976c1

[b@4204

[b@b1cd0

[b@1367e28

dabei hab ich natürlich immer alles gleich geschrieben (Case Sensitiv...)

Ich weis absolut nicht warum das immer anders ist...

Egal was ich mache - immer anders :(

  • Autor

Ok, anscheinend war eine Funktion nicht ausreichend...

Hab jetzt alles in einer lokalen Klasse realisiert:


class MD5 {

	private String text = null;

	private String hash = null;


	/**

	 * <u>Konstruktor mit Übergabe der zu verifizierenden Zeichenkette</u>

	 * @param text

	 */

	public MD5(String text)

	{

		this.text = text;

	}


	/**

	 * <u>Zurückgabe des MD5-Hashes, bei Initialisierter Membervariable 'text'</u>

	 * @return

	 */

	public String getMD5()

	{

		return text != null ? makeMD5() : null;

	}


	/**

	 * <u>Zurückgabe des MD5-Hashes</u>

	 * @param text

	 * @return

	 */

	public String getMD5(String text)

	{

		this.text = text;


		return text != null ? makeMD5() : null;

	}


	/**

	 * <u>MD5-Hash erzeugen</u>

	 * @return

	 */

	private String makeMD5()

	{

		MessageDigest md = null;

		byte[] encryptMsg = null;


		try {

			md = MessageDigest.getInstance( "MD5" );		// getting a 'MD5-Instance'

			encryptMsg = md.digest(text.getBytes());		// solving the MD5-Hash

		}catch (NoSuchAlgorithmException e) {

			System.out.println("No Such Algorithm Exception!");

		}


		String swap="";										// swap-string for the result

		String byteStr="";									// swap-string for current hex-value of byte

		StringBuffer strBuf = new StringBuffer();


		for(int i=0; i<=encryptMsg.length-1; i++) {


			byteStr = Integer.toHexString(encryptMsg[i]);	// swap-string for current hex-value of byte


			switch(byteStr.length()) {

			case 1:											// if hex-number length is 1, add a '0' before

				swap = "0"+Integer.toHexString(encryptMsg[i]);

				break;


			case 2:											// correct hex-letter

				swap = Integer.toHexString(encryptMsg[i]);

				break;


			case 8:											// get the correct substring

				swap = (Integer.toHexString(encryptMsg[i])).substring(6,8);

				break;

			}

			strBuf.append(swap);							// appending swap to get complete hash-key

		}

		hash = strBuf.toString();							// String with the MD5-Hash


		return hash;										// returns the MD5-Hash

	}


	/**

	 * <u>Setzt den Text, aus dem der MD5-Hash ermittelt werden soll</u>

	 * @param text The text to set.

	 */

	public void setText(String text) {

		this.text = text;

	}


	/**

	 * <u>Gibt den Text, aus dem der MD5-Hash ermittelt werden soll zurück</u>

	 * @return Returns the text.

	 */

	public String getText() {

		return text;

	}


	/**

	 * <u>Konstruktor mit Übergabe der zu verifizierenden Zeichenkette</u>

	 * @return Returns the hash.

	 */

	public String getHash() {

		return hash;

	}

}

Ich weis absolut nicht warum das immer anders ist...

Egal was ich mache - immer anders :(

Das Passwort ist immer dasselbe, nur bekommst du immer eine andere byte[] Instanz zurück, dessen id du ausgibst.

Du gibst nicht den Inhalt des byte arrays aus, den bekommst du mit z.B.

System.out.println(new String(deinByteArray));

Gruß Jaraz

Wo wir gerade beim Thema Md5 Verschlüsselung sind.

Ich hatte da letztens ein für mich unerklärliches Verhalten.

Die Passwörter waren MD5 verschlüsselt in einer Oracle Datenbank abgelegt.

Das eingegebene Passwort wurde mit der gleichen Funktion MD5 verschlüsselt mit der auch die Passwörter in der Datenbank verschlüsselt wurden.

Der Vergleich hat funktioniert wenn ich das ganze vom lokalen Testserver aus geamcht habe. Nachdem ich die Anwendung allerdings auf den Apllication Server deployt habe konnte ich mich nicht mehr anmelden.

Lokaler Testserver läuft auf Windows NT

Application Server Solaris 9

Kann mir jemand dieses merkwürdige Verhalten erklären und nen Tipp geben wie ich das abstellen kann.

  • Autor

gleiche daten und gleicher src ?

war das eine Java oder Oracle (PL/SQL) funktion?

was für ein JDBC (oder SQLJ) ?

Edit:

Hast du dir den Anmeldestring für die DB mal ausgeben lassen ?

Verschlüsselt habe ich das ganze mit einer Java Klassen. So wie in dem Code Beispiel oben.

Sourcen und Daten sind gleich.

Beim ausgeben des Anmeldestrings sind die beiden auf dem lokalen Testserver gleich auf dem App Server unterschiedlich

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.