Zum Inhalt springen

Passwortverschlüsselung mit MD5


TDM

Empfohlene Beiträge

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 :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;

	}

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...