# Passwort verschlüsseln mit MD5



## de1m (1. Feb 2007)

Hallo Leute ! 

Brauche seeeehr dringend eure Hilfe! 
also es geht um folgendes: 

Ich hab ein Jabber-Client der sich auf Java basiert, aber Problem ist das er das Passwort in eine buddyspace.conf Datei speichert, die man mühelos mit Editor aufmachen kann und Passwort nachschauen. Ich hab jetzt gefuden dass man das irgendwie mit MD5 das Password verschlüsseln kann. Ich hab Source-Code runtergeladen und jetzt weiss ich nicht wo ich da was ändern muss um das Passwort zu verschlüsseln 
vielleicht die Datei hab ehrlichgesagt keine Ahnung:

verkürzt:

ein mal BSMainFrame(befindet sich in souce \buddyspace\client\edu\ou\kmi\buddyspace\gui):



```
try {
            File file = new File("./buddySpace.conf");
            FileInputStream input = new FileInputStream(file);
            props.load(input);
        } catch (IOException e) {
            System.out.println("Cannot read conf file");
            return false;
        } catch (NullPointerException e) {
            System.out.println("Cannot read conf file");
            return false;
        }
        return true;
    } 
    
    /** Loads preferences */
    protected void loadPreferences() { 
        
        if (!loadPreferences(properties))
            return;
        
        username = properties.getProperty(PREF_NAME_USERNAME, DEF_USERNAME);
        resource = properties.getProperty(PREF_NAME_RESOURCE, DEF_RESOURCE);
        server = properties.getProperty(PREF_NAME_SERVER, DEF_SERVER);
        password = properties.getProperty(PREF_NAME_PASSWORD, DEF_PASSWORD);
        port = Integer.parseInt(properties.getProperty(PREF_NAME_PORT, Integer.toString(DEF_PORT)));
        useSSL = properties.getProperty(PREF_NAME_USE_SSL, useSSL? "true":"false").equals("true");
        priority = Integer.parseInt(properties.getProperty(PREF_NAME_PRIORITY, Integer.toString(DEF_PRIORITY)));
        autoLogin = properties.getProperty(PREF_NAME_AUTO_LOGIN, autoLogin? "true":"false").equals("true");
        
        fileServer = properties.getProperty(PREF_NAME_FILE_SERVER, DEF_FILE_SERVER);
        fileServerPath = properties.getProperty(PREF_NAME_FILE_SERVER_PATH, DEF_FILE_SERVER_PATH);
        fileServerPort = properties.getProperty(PREF_NAME_FILE_SERVER_PORT, DEF_FILE_SERVER_PORT);
        proxy = properties.getProperty(PREF_NAME_PROXY, DEF_PROXY);
        proxyPort = properties.getProperty(PREF_NAME_PROXY_PORT, DEF_PROXY_PORT);
        
        compactView = properties.getProperty(PREF_NAME_COMPACT_VIEW, compactView? "true":"false").equals("true");
        onlyOnline = properties.getProperty(PREF_NAME_ONLY_ONLINE, onlyOnline? "true":"false").equals("true");
        dockWindows = properties.getProperty(PREF_NAME_DOCK_WINDOWS, dockWindows? "true":"false").equals("true");
        showMsgs = properties.getProperty(PREF_NAME_SHOW_MSGS, showMsgs? "true":"false").equals("true");
        forceMsgsIntoChat = properties.getProperty(PREF_NAME_FORCE_MSGS_INTO_CHAT, forceMsgsIntoChat? "true":"false").equals("true");
        autoAway = properties.getProperty(PREF_NAME_AUTO_AWAY, autoAway? "true":"false").equals("true");
        showStatus = properties.getProperty(PREF_NAME_SHOW_STATUS, showStatus? "true":"false").equals("true");
        showDebug = properties.getProperty(PREF_NAME_SHOW_DEBUG, showDebug? "true":"false").equals("true");
        scrollTabs = properties.getProperty(PREF_NAME_SCROLL_TABS, scrollTabs? "true":"false").equals("true");
        //logoImgPath = properties.getProperty(PREF_NAME_LOGO_IMG_PATH, DEF_LOGO_IMG_PATH);
        
        autoSelectChat = properties.getProperty(PREF_NAME_AUTO_SELECT, autoSelectChat? "true":"false").equals("true");
        newMsgSoundFileName = properties.getProperty(PREF_NAME_NEW_MSG_SOUND_FILE_NAME, DEF_NEW_MSG_SOUND_FILE_NAME);
        
        currentLookAndFeel = properties.getProperty(PREF_NAME_LAF, "");
        
        //ixPropsPath = properties.getProperty(PREF_NAME_IX_PROPS_PATH, DEF_IX_PROPS_PATH);
    } 
 
    /** Saves preferences */
    protected void savePreferences() { 
                             
        // *** pripadne ulozit/vytvorit jen profil se zadanym cislem nebo jmenem ***
  /*Preferences prefs = Preferences.userNodeForPackage(BSCore.class); 
  
        prefs.putByteArray(PREF_NAME_USERNAME, username.getBytes()); 
  prefs.putByteArray(PREF_NAME_RESOURCE, resource.getBytes()); 
        prefs.putByteArray(PREF_NAME_SERVER, server.getBytes()); 
        prefs.putByteArray(PREF_NAME_PASSWORD, password.getBytes()); 
        prefs.putInt(PREF_NAME_PORT, port); 
        
        prefs.putByteArray(PREF_NAME_PROXY, proxy.getBytes()); 
        prefs.putInt(PREF_NAME_PROXY_PORT, Integer.parseInt(proxyPort)); 
        prefs.putByteArray(PREF_NAME_FILE_SERVER, fileServer.getBytes()); 
        prefs.putByteArray(PREF_NAME_FILE_SERVER_PATH, fileServerPath.getBytes()); 
        prefs.putByteArray(PREF_NAME_FILE_SERVER_PORT, fileServerPort.getBytes()); 
        prefs.putByteArray(PREF_NAME_IX_PROPS_PATH, ixPropsPath.getBytes()); 
        prefs.putByteArray(PREF_NAME_LOGO_IMG_PATH, logoImgPath.getBytes()); 
        //prefs.putBoolean( NAME_DOCK_FOCUS_VIEW, bDockFocusView ); */
        
        properties.setProperty(PREF_NAME_USERNAME, username);
  properties.setProperty(PREF_NAME_RESOURCE, resource); 
        properties.setProperty(PREF_NAME_SERVER, server); 
        properties.setProperty(PREF_NAME_PASSWORD, password); 
        properties.setProperty(PREF_NAME_PORT, Integer.toString(port)); 
        properties.setProperty(PREF_NAME_USE_SSL, useSSL? "true":"false");
        properties.setProperty(PREF_NAME_PRIORITY, Integer.toString(priority)); 
        properties.setProperty(PREF_NAME_AUTO_LOGIN, autoLogin? "true":"false");
        
        properties.setProperty(PREF_NAME_FILE_SERVER, fileServer); 
        properties.setProperty(PREF_NAME_FILE_SERVER_PATH, fileServerPath); 
        properties.setProperty(PREF_NAME_FILE_SERVER_PORT, fileServerPort); 
        properties.setProperty(PREF_NAME_PROXY, proxy); 
        properties.setProperty(PREF_NAME_PROXY_PORT, proxyPort); 
        
        properties.setProperty(PREF_NAME_COMPACT_VIEW, compactView? "true":"false");
        properties.setProperty(PREF_NAME_ONLY_ONLINE, onlyOnline? "true":"false");
        properties.setProperty(PREF_NAME_DOCK_WINDOWS, dockWindows? "true":"false");
        properties.setProperty(PREF_NAME_SHOW_MSGS, showMsgs? "true":"false");
        properties.setProperty(PREF_NAME_FORCE_MSGS_INTO_CHAT, forceMsgsIntoChat? "true":"false");
        properties.setProperty(PREF_NAME_AUTO_AWAY, autoAway? "true":"false");
        properties.setProperty(PREF_NAME_SHOW_STATUS, showStatus? "true":"false");
        properties.setProperty(PREF_NAME_SHOW_DEBUG, showDebug? "true":"false");
        properties.setProperty(PREF_NAME_SCROLL_TABS, scrollTabs? "true":"false");
        //properties.setProperty(PREF_NAME_LOGO_IMG_PATH, logoImgPath);
        
        properties.setProperty(PREF_NAME_AUTO_SELECT, autoSelectChat? "true":"false");
        properties.setProperty(PREF_NAME_NEW_MSG_SOUND_FILE_NAME, newMsgSoundFileName);
        
        properties.setProperty(PREF_NAME_LAF, currentLookAndFeel);
        
        //properties.setProperty(PREF_NAME_IX_PROPS_PATH, ixPropsPath); 
        
        saveProperties(properties);
    }
    
    public boolean saveProperties(Properties props) {
        if (props == null) return true;
        
        Enumeration propKeyes = props.keys();
        while (propKeyes.hasMoreElements()) {
            String k = (String) propKeyes.nextElement();
            properties.setProperty(k, (String) props.get(k));
        }
        
        try {
            File file = new File("./buddySpace.conf");
            FileOutputStream output = new FileOutputStream(file);
            props.store(output, "BuddySpace configuration file");
        } catch (IOException e) {
            System.out.println("Cannot write conf file");
            return false;
        } catch (NullPointerException e) {
            System.out.println("Cannot write conf file");
            return false;
        }
        return true;
    }
    
    public boolean saveStatusesBarJIDs(Enumeration jids) {
        Properties props = new Properties();
        
        if (!loadPreferences(props))
            return false;
        
        int jidNum = 0;
        while (jids.hasMoreElements()) {
            jidNum++;
            JID jid = (JID) jids.nextElement();
            String name = new String (PREF_NAME_STATUSES_BAR_JID + Integer.toString(jidNum));
            props.setProperty(name, jid.toString());
            //properties.setProperty(name, jid.toString());
        }
        
        props.setProperty(PREF_NAME_STATUSES_BAR_JID_NUM, Integer.toString(jidNum));
        //properties.setProperty(PREF_NAME_STATUSES_BAR_JID_NUM, Integer.toString(jidNum));
        
        return saveProperties(props);
    }
    
    
    public boolean addAndSavePreferences(String[] names, String[] values) {
        Properties props = new Properties();
        
        if (!loadPreferences(props))
            return false;
        
        int prefNum = (names.length < values.length)? names.length : values.length;
        for (int i=0; i < prefNum; i++) {
            props.setProperty(names[i], values[i]);
        }
```

vielleicht irgendwo hier drin ist es !


----------



## hupfdule (1. Feb 2007)

1. Code bitte auch in die entsprechenden Code-Tags setzen. Lässt sich weitaus besser lesen.

2. Nicht so viel Code posten. Nur den relevanten

3. MD5 wird dir nichts helfen. MD5 ist kein Verschlüsselung, sondern ein Hash-Verfahren. Das bedeutet, es ist ein Ein-Weg-Verfahren. Du kannst du zu einem eingegebenen Passwort überprüfen, ob es zu einem gegebenen Hash passt. Du kannst jedoch nicht aus einem Hash das zugehörige Passwort berechnen. Genau das ist aber notwendig. Denn der Jabber-Server brauch das Passwort im Klartext, damit er seinerseits es mit einem gespeicherten MD5-Hash vergleichen kann.
Wenn du verhindern willst, dass jemand das Passwort aus der Datei auslesen kann, setze die Rechte auf die Datei entsprechend restriktiv. Allerdings, wenn du so viel Wert auf dein Passwort legst, solltest du dich auch per SSL mit dem Jabber-Server verbinden. Sonst kann man dein Klartextpasswort ohnehin leicht aus den TCP-Daten auslesen.


----------



## de1m (1. Feb 2007)

also ich hab mich vielleich falsch ausgedrückt, ich brauche nur dass man das Password nicht sieht, also statt password=meinpass(steht so in config-Datei) will ich das da entweder gar nichts steht oder irgendwie unsichtbar oder verschlüsselt 
To hupfdule SSL brauche ich nicht, weil das nur für Intranet in meine Firma ist. 
Bei uns ist es eine Rechtslinie, dass man die Passwörter nicht sehen darf auch Systemadmin


----------



## hupfdule (1. Feb 2007)

de1m hat gesagt.:
			
		

> ich brauche nur dass man das Password nicht sieht, also statt password=meinpass(steht so in config-Datei) will ich das da entweder gar nichts steht oder irgendwie unsichtbar oder verschlüsselt


OK, dann kannst du aber immer noch nicht MD5 verwenden.  Denn damit geht das nicht. Du musst schon eine richtige Verschlüsselung anwenden. Der Aufwand damit ist etwas größer. Denn du musst ja sowohl ver- als auch entschlüsseln.

Sieht dazu [1] und [2].
Allerdings kannst du deinem Jabber-Client auch einfach sagen, dass er das Passwort nicht speichern soll. Dann musst du es halt jedes mal eingeben.


[1] http://java.sun.com/j2se/1.5.0/docs/guide/security/jce/JCERefGuide.html
[2] http://www.tutorials.de/forum/java/212543-verschluesselung.html (kurzes Code-Beispiel)


----------



## de1m (1. Feb 2007)

Kannst du mir sagen wie ich das mit nicht speicher machen kann ?


----------



## de1m (1. Feb 2007)

kann man das nicht machen, dass er den Passwort an Server unverschlüsselt schickt und in config-Datei Hash von Passwort schreibt?


----------



## hupfdule (1. Feb 2007)

de1m hat gesagt.:
			
		

> Kannst du mir sagen wie ich das mit nicht speicher machen kann ?


Nein. Ist vom Programm abhängig. Kann man das dort nicht abschalten? Ich hab keine Lust durch den Code zu gucken, aber notfalls kannst du eben dort abschalten. Müsstest dann aber dafür sorgen, dass er den Benutzer beim Einloggen nach dem Passwort fragt.



> kann man das nicht machen, dass er den Passwort an Server unverschlüsselt schickt und in config-Datei Hash von Passwort schreibt?


Nein. Aus dem o.g. Grund. MD5 ist ein Einweg-Verfahren. Du kannst aus einem Passwort einen Hash berechnen, aber nicht umgekehrt. Wenn du nur den Hash gespeichert hast, kannst du also nicht das Klartextpasswort an den Server schicken, weil du es nicht mehr hast und nicht errechnen kannst.


----------



## Wyvern (1. Feb 2007)

Ver- und Entschlüsselung wird kurz in diesem Beispiel erklärt. Scjau mal, ob Du da noch ein wenig nachgoogeln kannst. Ich habs auf jeden Fall schonmal verwenden können.


----------



## de1m (1. Feb 2007)

noch eine Frage, in dem Ordner (BuddySpace) sind viele andere Ordener drin und .java Dateien

Gibt's da eine extra Datei die das ganze in eine Programm kompiliert oder wie macht man das ?


----------



## hupfdule (1. Feb 2007)

Oh, wenn ich dich richtig verstehe, kennst du dich mit Java nicht aus? Dann wirst du auch kaum die Verschlüsselung selbst hinbekommen. Da müsstest du schon damit programmieren können.

Kompilieren tut man mit einem extra Befehl.


----------



## de1m (1. Feb 2007)

de1m hat gesagt.:
			
		

> Ver- und Entschlüsselung wird kurz in diesem Beispiel erklärt. Scjau mal, ob Du da noch ein wenig nachgoogeln kannst. Ich habs auf jeden Fall schonmal verwenden können.



Jaa, das sieht schon mal gut aus !


----------



## de1m (1. Feb 2007)

Das hab schon von Anfang an gemeint! 

Ich hab JabberServer und -Client konfiguiert, damit es mit einander funktioniert, und dann hat mein Ausbilder festgestellt, dass der Client das Passwort in Klartext speichert, aber in Programm kann man das nicht einstellen, deswegen hat er mir gesagt (das war vor eine Woche) das ich das Programm umprogramieren muss. Quellcode hab ich jetzt, aber ich weiss gar nicht was ich damit machen kann und wie !

...tja, das war meine traurige Geschichte ! ;-)


----------



## de1m (1. Feb 2007)

was für extra Befehl ist es ?


----------



## hupfdule (1. Feb 2007)

de1m hat gesagt.:
			
		

> was für extra Befehl ist es ?



javac. Aber wenn das viele Klassen sind, musst du den Klassenpfad korrekt setzen. Liegt im Verzeichnis vlt. eine build.xml? Dann ist das einfacher zu kompilieren. Dann brauchst du Apache ant und kannst im Projektverzeichnis einfach 'ant' aufrufen (funktioniert ähnlich wie 'make').


----------



## de1m (1. Feb 2007)

ne, da gibt'S keine einzige .xml datei
Ich hab ein Javaeditor, der eigentlich mit javac arbeitet
Also wenn ich eine .java-Datei aufmache, dann kann ich das kompiliern, aber nur eben eine Datei und nicht komplettes Verzeichnis !


----------



## hupfdule (1. Feb 2007)

Also wenn dein Editor eine richtige IDE ist, sollte die auch mit vollständigen Projekten klar kommen. Kannst dir auch eine andere IDE, wie Eclipse nehmen, dort ein Projekt draus machen und das dann damit kompilieren. Allerdings ist der Aufwand der Installation dann sicher höher als das eigentliche Kompilieren. ;-)


----------



## de1m (1. Feb 2007)

Leute Hilfe brauche ich immer noch! 
Eine Frage, wenn ich z.B SSL benutzen werde, wird Passwort dann weiter in Klartext gespeichert ?


----------



## hupfdule (1. Feb 2007)

de1m hat gesagt.:
			
		

> Eine Frage, wenn ich z.B SSL benutzen werde, wird Passwort dann weiter in Klartext gespeichert ?



Natürlich. Das eine hat mit dem anderen ja nix zu tun. Das Speichern des Passworts erledigt der Client nur für sich selbst. Er könnte das wie gesagt auch lassen und den Benutzer bei jedem Login danach fragen.
SSL wird nur für die _Übertragung_ benutzt. Das heißt, dein Klartext-Passwort wird niemand aus den TCP-Daten filtern können, da diese verschlüsselt sind. Jedoch hat das auf die Speicherung des Passworts in der Konfiguration keinen Einfluss. Wenn es darum geht, dann hast du quasi nur die beiden Optionen:

1. Quellcode bearbeiten, damit das Passwort beim Schreiben ver- und beim Lesen entschlüsselt wird
2. Quellcode anpassen, damit das Passwort nicht gespeichert, sondern stattdessen bei jedem Login abgefragt wird.


----------



## de1m (1. Feb 2007)

Noch mal, auf dem Server ist mein Password gespeichert(Server kann auch MD5) und wenn ich beim Einloggen mein Password eingebe, wird ein Hash generiert, der dann an Server geschickt wird, der Server bekommt Hash von mir, genriert dann von meinem Passwort der bei ihm gespeicher ist auch ein Hash und wenn die gleich sind dann lässt er mich rein, spricht praktisch ich bin angemeldet


Kann ich in diesem Fall dann MD5 benutzen ?


----------



## de1m (1. Feb 2007)

so hab ich das aus fünf Wörter von meinem Ausbilder verstanden !


----------



## hupfdule (1. Feb 2007)

Wenn das tatsächlich so gelöst ist, dann klappt das! Wenn also der Server das Klartext-Passwort hat, dann kann _er_ den Hash generieren und du musst bei dir dann _nur noch_ den Hash speichern.

Allerdings, läuft das eurer Policy nicht zuwider? Denn dann ist das Klartext-Passwort (und nicht nur deins) ja auf dem Server gespeichert. Und so was sollte doch verhindert werden.


----------



## de1m (1. Feb 2007)

Aus Serverseite ist es nicht in Klartext gespeichert, aber Server kann das trotzdem aus meinem Password ein Hash generieren.

Soweit ich das jetzt weiss brauche ich keine extraprogramm um md5 zu benutzen oder ? Also da gibt's schon befehle in Java?

Kannst du mir ein code geben, den ich dann an meine Programm anpassen kann ?

ich hab z.B.: das gefunden 


```
import java.io.*;
import java.security.MessageDigest;
public class MDGenerator
{
  static byte[] messageDigest( String file, String algo ) throws Exception
  {
    MessageDigest messagedigest = MessageDigest.getInstance( algo );
    byte[] md = new byte[8192];
    InputStream in = new FileInputStream( file );
    for ( int n = 0; (n = in.read( md )) > –1; )
      messagedigest.update( md, 0, n );
    return messagedigest.digest();
  }
  static void digestDemo( String file, String algo ) throws Exception
  {
    byte[] digest = messageDigest( file, algo );
    System.out.println( algo + ", Schlüssellänge: " + digest.length * 8 + " Bit" );
    for ( byte b : digest )
      System.out.printf( "%02x", b );
    System.out.println( "\n" );
  }
  public static void main( String[] args ) throws Exception
  {
    digestDemo( "MDGenerator.java", "SHA" );
    digestDemo( "MDGenerator.java", "MD5" );
  }
}
```

oder 


```
import java.io.*;
import java.security.MessageDigest;

public class MDGenerator
{
  private static byte[] messageDigest( String file, String algo ) throws Exception
  {
    MessageDigest messagedigest = MessageDigest.getInstance( algo );
    byte[] md = new byte[8192];
    InputStream in = new FileInputStream( file );
    for( int i = 0; (i = in.read( md ))> -1;)
    {
      messagedigest.update( md, 0, i );
    }
    return messagedigest.digest();
  }

  static String generateHash( String file, String algo ) throws Exception
  {
    byte[] digest = messageDigest( file, algo );
    String output = "";
    for ( byte b : digest )
      output = output + Integer.toHexString( b & 0xFF);
    return output;
  }
}
```


aber ich glaube,dass das nur MD5-Hash generatoren sind, wobei ich nicht sicher bin !


----------



## hupfdule (1. Feb 2007)

de1m hat gesagt.:
			
		

> Aus Serverseite ist es nicht in Klartext gespeichert, aber Server kann das trotzdem aus meinem Password ein Hash generieren.


Dann hilft dir das nichts. Das ist das, was ich die ganze Zeit versuche dir zu erklären. Auf einer Seite _muss_ das Passwort im Klartext vorliegen. Auf der anderen Seite reicht der Hash. Wenn der Server den Hash gespeichert hat (das wird sicherlich so sein, oder?), dann musst du dem Server das Klartext Passwort liefern. Dann kann er es hashen und die Hashs vergleichen. 
Angenommen der Server würde statt einem Klartext-Passwort einen Hash erwarten und du würdest den Hash speichern, hättest du nichts gewonnen (das hab ich in meiner obigen Antwort leider nicht erwähnt). Denn ein potentieller Angreifer bräuchte dein Klartextpasswort nicht. Er muss ja nur den Hash rüber schicken. Der Hash wäre also quasi das Passwort. Einfaches auslesen und rüberschicken reicht.



> Soweit ich das jetzt weiss brauche ich keine extraprogramm um md5 zu benutzen oder ? Also da gibt's schon befehle in Java?


Ohne mir deine Codeabschnitte im Detail angeguckt zu haben, sind das schon die richtigen Methoden. Aber wie gesagt, wird dir so nichts bringen.... 



> aber ich glaube,dass das nur MD5-Hash generatoren sind, wobei ich nicht sicher bin !


Was ist denn ein MD5-Hash Generator? Eine Klasse, die einen String in einen Hash wandelt? Wär doch super, oder? ;-)

Damit zu zur Thematik MD5 noch etwas mehr verstehst: 
http://de.wikipedia.org/wiki/MD5
http://de.wikipedia.org/wiki/Hash-Funktion

Dort steht das sicher besser erklärt, als ich das jetzt hinbekomme. Die Berechnungsalgorithmen kannst du dabei natürlich überlesen. ;-)

So wie ich dich verstehe, wird dir MD5 nichts bringen.
Also zum Rekapitulieren:

Der Server speichert dein Passwort als MD5 Hash. (das ist vernünftig)
Dein Client speichert dein Passwort im Klartext. (laut eurer Policy verboten)

Wo du ansetzen musst, ist definitv der Client. Entweder du bringst ihm bei, dass Passort verschlüsselt (nicht gehasht!) zu speichern oder zwingst ihn dich jedes mal zu fragen. Zumindest, wenn ich die Anforderungen richtig vertstanden habe. Du brauchst dich aber noch nicht mit MD5 oder Verschlüsselung beschäftigen, solange nicht klar ist, wie der Server das Passwort erwartet (wobei ich mir da ziemlich sicher bin).


----------



## de1m (1. Feb 2007)

ok, ich frag noch wie das genau auf Serverseite ist und dann komm ich wieder ! 
Für heute war das glaube ich
P.S bis morgen !!


----------



## Wyvern (1. Feb 2007)

Wobei für MD5 bereits Kollisionen (= 2 unterschiedliche Passwörter, die den selben Hashwert haben) nachgewiesen sind. Ich weiß nicht, WIE sicher ihr die Anwendung braucht. 
Aber selbst für SHA-1 ist bewiesen, daß es möglich ist, Kollisionen zu erzeugen. (gefunden wurden meines Wissens aber noch keine) 

Kryptographie mit MD5 und SHA-1 war ein Teilthema meiner Diplomarbeit.


----------



## de1m (1. Feb 2007)

bei dem Client muss man mit seinem Login und Passwort anmeldet die man in unseres Netzwerk hat. Also in meinem Fall kann ich praktisch die Datei aufmachen und den Passwort den letzt angemeldeten User schauen


----------



## hupfdule (1. Feb 2007)

de1m hat gesagt.:
			
		

> bei dem Client muss man mit seinem Login und Passwort anmeldet die man in unseres Netzwerk hat. Also in meinem Fall kann ich praktisch die Datei aufmachen und den Passwort den letzt angemeldeten User schauen



Jetzt verwirrst du mich etwas. Sind Login und Passwort für eure Workstations die selben wie für den Jabber Server? Vermutlich hab ich dich da nur falsch verstanden.
Aber wieso kannst du das Passwort des _zuletzt angemeldeten_ Users sehen? Solltest du nicht nur die Passwörter deiner Accounts (aber dort _aller_ Accounts) sehen können)? Normalerweise speichert ein Client die Passwörter ja nur, damit der Benutzer sie nicht jedes mal eintippen muss.


----------



## de1m (2. Feb 2007)

Guten Morger ! 
Also, in Netzwerk hat jeder ein Login und Passwort! Und genau die werden auch bei Anmelden in Jabber benutzt, also der User registriert kein neuen Account, der meldet sich mit seinem Name(Login@adresse.jabberserver) an. Wenn z.B mein Kollege sich angemeldet hat im Domen und in Jabber-Client, und danach ich mich in Domen auf dem gleichen Rechner anmelde, kann ich dann die .conf Datei aufmachen und den Passwort, von letztangemeldeten User sehen, spicht ich kann unter seinem Name mich anmelden. Und bei uns ist es eine Rechtslinie, dass die Passworter niergendswo geschieben werden darf oder in Klartext gespeichert


----------



## de1m (2. Feb 2007)

de1m hat gesagt.:
			
		

> kann ich dann die .conf Datei aufmachen und den Passwort, von letztangemeldeten User sehen,



...das ist aber nicht so tragisch, weil ich immer nur ein Rechner benutze, aber z.B Systemadministrator kann bei jedem in unseres Netztwerk Passwörter sehen


----------



## hupfdule (2. Feb 2007)

de1m hat gesagt.:
			
		

> Also, in Netzwerk hat jeder ein Login und Passwort! Und genau die werden auch bei Anmelden in Jabber benutzt, also der User registriert kein neuen Account, der meldet sich mit seinem Name(Login@adresse.jabberserver) an.


Ok, hab ich verstanden.



> Wenn z.B mein Kollege sich angemeldet hat im Domen und in Jabber-Client, und danach ich mich in Domen auf dem gleichen Rechner anmelde, kann ich dann die .conf Datei aufmachen und den Passwort, von letztangemeldeten User sehen,


Das hab ich nicht verstanden.
Domen == Domain?
Also, jeder hat in der Domain seinen eigenen Benutzer. Es können mehrere Benutzer den selben Rechner verwenden. Dort ist der Jabber-Client installiert. Dieser sollte doch die Konfiguration pro Benutzer verwalten. Also jeder hat nur seine eigene Konfiguration. Oder nicht? Und damit solltest du auch nur deine Konfiguration sehen. Wieso du den zuletzt eingeloggten Benutzer siehst, ist mir noch nicht ganz klar.
Aber im Grunde auch egal. Die Anforderung ist, dass das Passwort nicht gespeichert werden soll und das leistet euer Client offenbar nicht. Also muss da was getan werden.


----------



## de1m (2. Feb 2007)

genau


----------

