Passwort in Datei speichern - wie?

DStrohma

Bekanntes Mitglied
Hallo,

ich schreibe an einer Anwendung bei der der Benutzer die Möglichkeit haben soll ein Passwort zu hinterlegen, das dann gespeichert wird und beim nächsten Start zur Verfügung steht.
Meine Frage wäre: Wie schaffe ich es dass es nicht im Klartext hinterlegt wird?? Zwei Dinge gingen mir bereits durch den Kopf:

1) Das Passwort in eine Klasse packen und diese Klasse dann serialisieren und beim nächsten Start wieder de-serialisieren.
2) Mit Hilfe irgend eines Algos den Klartext verändern und speichern und beim nächsten Start mit Hilfe des Algos wieder herstellen. Was eignet sich dafür am besten??

Danke im Voraus!
 
M

maki

Gast
Was eignet sich dafür am besten??
"Besser" ist die Steigerung von "Gut", aber gut ist keine der Optionen...

Was du willst geht nicht wirklich "sicher", das beste/praktischte wäre dann gar nicht erst zu versuchen zu verschlüsseln, sondern einfach nur kodieren, wie zB. mit Base64, das lässt sich dann sogar mit Winzip "knacken", ist aber nicht unsicherer als deine Alternativen, nur einfacher umzusetzen ;)
 

turtle

Top Contributor
Passwörter werden selten so abgespeichert, dass diese wieder zu Klartext gemacht werden können.

Wie maki richtig anmerkte, wird stattdessen ein Hashwert berechnet (z.B. SHA-1, MD5, oder...) und dies wird mit der Userangabe verglichen, nachdem daraus auch wieder ein Hashwert errechnet wurde. Somit steht das Passwort nirgends im Klartext und es kann überprüft werden ob Hash(Userangabe) mit dem gespeicherten Wert übereinstimmt.

Damit nicht gleiche Passwörter immer wieder zu gleichen Hashwerten führen kann man da noch sogenannten Salt hinzugeben um eine Attacke zu erschweren.
 

DStrohma

Bekanntes Mitglied
Also gut, dann gibt es also tatsächlich nicht wirklich etwas sicheres :D Das ist soweit ok, nicht weiter schlimm. Ich würde das Passwort gerne in einer lokalen Properties Datei speichern. Aber wie gesagt, nicht umbedingt im Klartext.
Irgend eine Idee wie das am besten zu bewerkstelligen ist? Auch mit Base64?? Oder ist das eher nur für die Ausgabe in einer eigenen Datei?
 

DStrohma

Bekanntes Mitglied
Passwörter werden selten so abgespeichert, dass diese wieder zu Klartext gemacht werden können.

Wie maki richtig anmerkte, wird stattdessen ein Hashwert berechnet (z.B. SHA-1, MD5, oder...) und dies wird mit der Userangabe verglichen, nachdem daraus auch wieder ein Hashwert errechnet wurde. Somit steht das Passwort nirgends im Klartext und es kann überprüft werden ob Hash(Userangabe) mit dem gespeicherten Wert übereinstimmt.

Damit nicht gleiche Passwörter immer wieder zu gleichen Hashwerten führen kann man da noch sogenannten Salt hinzugeben um eine Attacke zu erschweren.

Ja das habe ich soweit auch implementiert gehabt aber da gibt es einfach das Problem dass der User ständig das Passwort eingeben muss. Ich kann es bei dieser Vorgehensweise nicht speichern, sondern muss es immer wieder abfragen. Ich würde es aber gerne speichern. Mir ist vollkommen klar dass das nicht sicher ist, das muss es aber für meinen Anwendungsfall ehrlich gesagt auch nicht sein.
 

L-ectron-X

Gesperrter Benutzer
Folgende Klasse gibt dir den aus einer übergebenen Zeichenkette erzeugten MD5-Hash zurück:
Java:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;


public class MD5Hash {

   public static String getMD5Hash(String str) {
      StringBuilder sb = new StringBuilder(32);
      try {
         MessageDigest md5 = MessageDigest.getInstance("MD5");
         md5.update(str.getBytes());
         Formatter f = new Formatter(sb);
         for (byte b : md5.digest()) {
            f.format("%02x", b);
         }
      } 
      catch (NoSuchAlgorithmException ex) {
         ex.printStackTrace();
      }
      return sb.toString();
   }
}
 

L-ectron-X

Gesperrter Benutzer
Kannst du doch. Schreibe doch das Ergebnis der Hashberechnung in eine (Text-)datei. Zum Vergleichen der Benutzereingabe liest du das Passwort wieder aus der Textdatei aus...
Oder verstehe ich dich falsch?
 

DStrohma

Bekanntes Mitglied
Kannst du doch. Schreibe doch das Ergebnis der Hashberechnung in eine Textdatei. Zum Vergleichen der Benutzereingabe liest du das Passwort wieder aus der Textdatei aus...
Oder verstehe ich dich falsch?

Ich denke du verstehst mich falsch. Ich will nicht dass der Benutzer das Passwort beim Start der Anwendung nochmals angeben muss. Einmal angeben, speichern und dann immer wieder laden. Aber im Klartext speichern ist wirklich etwas zu billig. Ich würde es gerne etwas transformieren wollen, weis aber nicht was dafür das beste ist.
Das das nicht sicher ist weis ich.
 

zzuegg

Mitglied
Nja, wenn du das passwort speicher willst, ist das speichern des MD5 oder SHA1 eigentlich kein problem. Für jegliche authentifizierung sollte sowieso nur der hash übertragen/verglichen/gespeichert werden und nicht das klartext password. Insofern solltest du eignetlich kein problem haben...

Eingabe direkt in hash umwandeln und anschliesend nur noch den hash benützen...
 
T

Tomate_Salat

Gast
Aber im Klartext speichern ist wirklich etwas zu billig.

Wenn dein Programm das Passwort wiederherstellen kann, dann hält sich der Schutz wirklich stark in Grenzen. Es reicht wenn einer dein Programm dekompiliert. Der schaut sich dann die Routine zur Wiederherstellung an, schreibt ein kleines Tool und stellt es ins Internet ;-).

Wenn du etwas wie einen Passwortmanager schreiben willst, dann sollte dieser mindestens ein Master-Passwort haben, welches zum verschlüsseln der Passwörter beiträgt.
 

mla.rue

Bekanntes Mitglied
Mir erschließt sich irgendwie nicht so ganz der Sinn. Ich vermute der TO möchte so eine Art "passwort manager" wie ihn z.B. Firefox oder Thunderbird nutzt... 1x Passwort eingeben "abspeichern" Hacken an und es wird ab da automatisch benutzt.

Wie schon dutzendmal gesagt, du nimmst das Passwort (egal ob als kodierter Hashwert oder Klartext) und speicherst es in ein properties File, dieses File verschlüsselst du (egal wie, gibts genug Möglichkeiten) so, dass nur dein Javaprogramm drauf zugreifen kann (weil das Java Programm z.B. das Master-Passwort hat), es entschlüsseslt jedesmal die Datei, liest das PW aus und haut es automatisch rein, so dass der Anwender nichts machen muss.

Das Ganze ist aber sowas von unsicher, dass dir den ganzen Aufstand bezüglich Passwörter gleich sparen kannst.

Allerdings habe ich eine Anwendung, wo genau sowas passiert (wobei ich mir aber das Verschlüsseln der Datei spare). Die Anwender haen einfach 0 Ahnung und würden die Passwortdatei nie im Leben finden, sie würden neteinmal danach suchen. Leute mit genug krimineller Energie gibts in dem Tätigkeitsbereich auch nicht. Es gibt einfach ein, zwei Methoden, die nur eingeschränkt benutzt werden sollen, was sich über ein PW am einfachsten realisieren lies. Der Punkt ist aber, wenn ich das PW automatisch eintrage, können die User diese Methoden beim Starten bereits ausführen, was nicht sein soll. So blöd wie die sind, zeigt ihnen eine PW Abfrage "ok ups also jetzt vorsicht, sonst verhaue ich was".
 

DStrohma

Bekanntes Mitglied
Um mal den Sinn etwas zu erklären: Ich schreibe ein Programm das Backups von voreingestellten Ordnern erstellt (als ZIP) das ganze dann verschlüsselt und zu Dropbox hochlädt. Das Passwort brauche ich zum verschlüsseln der Datei.
Mir geht es nur darum dass Dropbox die Backups nicht einsehen kann. Mir geht es nicht darum das Programm vor anderen Usern sicher zu machen. Ich könnte das Passwort also eigentlich auch im Klartext speichern da ich nicht annehme dass sich ein Dropbox-Mitarbeiter bei mir einhäckt, mir das Passwort klaut und wahnsinnig interessiert meine Backups durchforstet... ;)

Und ja, die Verschlüsselung habe ich soweit schon und die ist sicher:
Java:
final Cipher encryptionCipher = Cipher.getInstance("PBEWithSHA256And256BitAES-CBC-BC");
Mit Salt und dem ganzen drum und dran...
 
Zuletzt bearbeitet:

DStrohma

Bekanntes Mitglied
Ich muss auch mal sagen dass es mich echt fasziniert und amüsiert dass die meisten Leute gleich schreiben dass ich das mit Hashes machen muss sonst ist das nicht sicher usw. Habt doch einfach mal etwas Vertrauen in die Menschheit. Wenn das jemand so machen will, dann wird er schon seine Gründe haben. :)
 
T

Tomate_Salat

Gast
Habt doch einfach mal etwas Vertrauen in die Menschheit

Stimme ich dir voll und ganz zu. Wenn du mir deine Kontodaten per PM schickst, werde ich sicher auf diese Aufpassen und dir helfen, dass du diese nicht verlierst/vergisst. =)

Nein ernsthaft: Jeder Benutzer deines Programms ist potentiell böse :)D). Wenn man der Menschheit vertrauen könnte, gäbe es nicht immer wieder so einen Wirbel um Sicherheit ;-). Ob du mal das Ziel von Hackern wirst, kann man vllt ausschließen. Aber das ist imho kein Grund, etwas schlecht zu lösen. Es reicht, wenn dir jemand aus deinem Bekanntenkreis schaden will ;-)
 

zzuegg

Mitglied
Warum wird hier dauernd von MD5 gesprochen??
MD5 ist kein brauchbarer Algorithmus um ein Passwort zu verschlüsseln...

Hier mal etwas Lektüre:

- Hash mich, die zweite | heise Security
- MD5 - Wikipedia, the free encyclopedia

Bitte, bitte, bitte, nicht mehr MD5 für sowas nutzen oder gar jemand anderem vorschlagen...

Naja, das kommt dann schon auf den Level der benötigten sicherheit an, wenn jemand einen so massiven Aufwand betreibt (Cluster aus 200ps3's) um an mein Password zu kommen dann bitte.

Btw, warum ist SHA dann sicherer? Schneier on Security: Cryptanalysis of SHA-1

100% Sicherheit gibs nicht und wirds nie geben, alles nur eine Frage des aufwandes jeglichen Hash zu brechen.

BTT:
Wenn das speicher von einem Klartext PW für dich dein problem ist, wo liegt dann das Problem?
 

Sonecc

Gesperrter Benutzer
Naja, das kommt dann schon auf den Level der benötigten sicherheit an, wenn jemand einen so massiven Aufwand betreibt (Cluster aus 200ps3's) um an mein Password zu kommen dann bitte.

Bitte auch alles lesen, wenn du dir eine Meinung bilden willst.

Um mal aus dem von mir verlinkten Wikipedia Artikel zu zitieren:

A collision attack exists that can find collisions within seconds on a computer with a 2.6 GHz Pentium 4 processo

Inzwischen ist MD5 so sicher, dass du es auch direkt im Klartext speichern kannst.
Desweiteren ist der erste teil deines Satzes schon mit ein Grund dafür, warum inzwischen fast jeden Tag neue Passwörter im Netz auftauchen (die dann auch noch oft schlecht oder gar nicht verschlüsselt sind). Es ist ein geringer Aufwand einen Algorithmus zu verwenden, der halbwegs sicher ist. Dafür habe ich die Daten aber dann wenigstens versucht zu schützen.
 

DStrohma

Bekanntes Mitglied
BTT:
Wenn das speicher von einem Klartext PW für dich dein problem ist, wo liegt dann das Problem?

Ja ich könnte es im Klartext speichern aber bevorzuge zumindest soviel Sicherheit, dass jemand der die Datei öffnet in der es gespeichert ist, nicht gleich das direkte Passwort sieht. Ich wäre froh wenn mir jemand vielleicht einen Algo vorschlagen könnte der den String etwas "verwüstet" und das dann im Code auch wieder rückgängig machen kann. Das ist alles was ich brauch.
 

iB0T

Mitglied
Hallo, möchte exakt das gleiche wie DStrohma.
Jedoch möchte ich den Quellcode verstehen!Kann mir wer ein gutes Tutorial zu diesem Thema empfehlen?
 

iB0T

Mitglied
o_O OOOOOPS ich habe (ohne Witz) google vergessen.Und nein bei Videos versteh ich das einfach nur leichter
 
Zuletzt bearbeitet:

turtle

Top Contributor
...das Problem dass der User ständig das Passwort eingeben muss.

Das verstehe ich nicht :bahnhof:

Warum muss der Benutzer das Passwort mehrmals eingeben? Wenn ich beispielsweise an eine Datenbank denke, so authentifiziert sich der Benutzer ja auch nur einmal. Die Verbindung zur DB wird aufgebaut und erst bei Programmende geschlossen.
 

DStrohma

Bekanntes Mitglied
Hey iBOT, ist nehme an dass es nicht Absicht ist dass in deiner Signatur ausgerechnet das Wort "intelligentes" falsch geschrieben ist :)
 

DStrohma

Bekanntes Mitglied
Das verstehe ich nicht :bahnhof:

Warum muss der Benutzer das Passwort mehrmals eingeben? Wenn ich beispielsweise an eine Datenbank denke, so authentifiziert sich der Benutzer ja auch nur einmal. Die Verbindung zur DB wird aufgebaut und erst bei Programmende geschlossen.

Ich meinte damit, dass der User bei jedem Start der Anwendung sein Passwort eingeben muss (daraus wird dann der Hash errechnet und mit dem gespeicherten Hash verglichen). Das will ich aber nicht. Ich will dass der User einmal ein Passwort angibt und es ab diesem Zeitpunkt nicht mehr angeben muss - es also gespeichert wird. Womit soll ich denn den gespeicherten Hash vergleichen wenn der User sein Passwort nicht jedes mal beim Start neu eingibt? ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Erstellung einer verschlüsselten Passwort Datei Allgemeine Java-Themen 11
S Passwort geschützte Excel Datei öffnen (POI) Allgemeine Java-Themen 4
G Blind-Datei (Passwort auslesen) Allgemeine Java-Themen 5
G Zip Datei - Passwort schützen Allgemeine Java-Themen 13
Z Passwort Versuche speichern Allgemeine Java-Themen 8
Scream_ilias passwort meines pc per brute force methode knacken Allgemeine Java-Themen 4
J Passwort Manager Allgemeine Java-Themen 15
B Swing Hilfe bei Abfrage von Benutzernamen und Passwort Allgemeine Java-Themen 2
F Best Practice Passwort Recovery - Schulbeispiel Allgemeine Java-Themen 4
D Passwort verschlüsseln - Wo Allgemeine Java-Themen 2
J Passwort Verschlüsselung hash Allgemeine Java-Themen 2
O verschlüsseltes Passwort ablegen Allgemeine Java-Themen 12
G Unix Passwort mit Java ändern? Allgemeine Java-Themen 3
OnDemand Passwort entschlüsseln Allgemeine Java-Themen 8
S Random Passwort für den User + Hashen Allgemeine Java-Themen 6
W Passwort Clientseitig sicher ablegen ohne Hash Allgemeine Java-Themen 2
DStrohma Verschlüsselung: SALT aus Passwort generieren? Allgemeine Java-Themen 3
R Windows - User Passwort ändern Allgemeine Java-Themen 2
B "Verschlüsselung" mit Passwort (XOR bzw. Modulo) Allgemeine Java-Themen 7
R Programm soll warten bis eine Passwort eingabe gemacht wurde. Allgemeine Java-Themen 6
J TrueZip - Passwort bei Zipfile Allgemeine Java-Themen 13
I Passwort verschlüsseln Allgemeine Java-Themen 22
padde479 zip mit Passwort Allgemeine Java-Themen 2
H root-Passwort übergeben Allgemeine Java-Themen 28
C Passwort sicher speichern Allgemeine Java-Themen 5
P Passwort lokal speichern Allgemeine Java-Themen 5
F Passwort hash Allgemeine Java-Themen 8
L Passwort mit Regulärem Ausdruck prüfen Allgemeine Java-Themen 6
S .rar-Dateien ein Passwort als Parameter übergeben Allgemeine Java-Themen 5
J Passwort(String) ---> SecretKey(Spec) Allgemeine Java-Themen 6
T jxl Passwort Allgemeine Java-Themen 3
P URL mit htaccess in Explorer öffnen (ohne user-passwort) Allgemeine Java-Themen 6
B Passwort verwenden ohne dass es im Quelltext steht Allgemeine Java-Themen 24
E TextField/Passwort Allgemeine Java-Themen 5
F Java Passwort abfrage Allgemeine Java-Themen 2
D sicheres hardgecodetes passwort? Allgemeine Java-Themen 18
kodela StatusBar-Anzeigen auch in Log-Datei ausgeben Allgemeine Java-Themen 3
G Maven Projekt JAR-Datei Allgemeine Java-Themen 6
E XML - Datei Darstellung in IntelliJ als Baum Allgemeine Java-Themen 2
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
D Erste Schritte Mp3 Datei kann nicht von der Festplatte geöffnet werden - mit ChatGPT erstellt Allgemeine Java-Themen 7
J Filenotfoundexception obwohl Datei existiert Allgemeine Java-Themen 6
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
E Datei verschoben Event Allgemeine Java-Themen 3
D Datei mit "Kohsuke GitHub API" in Repository hochladen Allgemeine Java-Themen 2
S Bookmark HTML Datei einlesen, alle Links erhalten und manche editieren..? (aktuell JSoup) Allgemeine Java-Themen 4
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
G JavaFX Maven Projekt als .exe Datei exportieren Allgemeine Java-Themen 10
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
Neumi5694 Datei komprimiert Allgemeine Java-Themen 6
_user_q Obfuscate einer .jar-Datei mit ProGuard? Allgemeine Java-Themen 2
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
E java mithilfe url .jar datei öffnen Allgemeine Java-Themen 9
E Java .exe Datei mit args starten Allgemeine Java-Themen 2
W Bilder werden in App mit Jar-Datei nicht angezeigt Allgemeine Java-Themen 15
Master3000 Java Datei mehrmals einlesen Allgemeine Java-Themen 4
M Excel Datei Erstellen Allgemeine Java-Themen 2
E Input/Output Eigene Datei mit java öffnen Allgemeine Java-Themen 9
R Sonderzeichen aus Datei einlesen und in Datei ausgeben. Allgemeine Java-Themen 17
Tobero Download .jar von github lädt kaputte Datei runter Allgemeine Java-Themen 3
P Bat Datei in Java ausführen Allgemeine Java-Themen 2
S Verwendet Programmiersprache aus Quellcode - Datei ermitteln Allgemeine Java-Themen 6
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
J Jar-Datei ausführen Allgemeine Java-Themen 7
C Outlook msg-Datei Anhänge extrahieren Allgemeine Java-Themen 2
G Datei aus Ordner wählen, ohne den Dateinamen im Pfad angeben zu müssen Allgemeine Java-Themen 4
G Datei senden via Xmodem an Serial-Port Allgemeine Java-Themen 35
C Wav-Datei aus Jar laden? Allgemeine Java-Themen 11
L Best Practice Zip Datei aktualisieren Allgemeine Java-Themen 1
N Speicherort einer Datei im Explorer ändern Allgemeine Java-Themen 8
H Mehrere PNG-Files in einer Datei Allgemeine Java-Themen 9
Gaudimagspam CSV-Datei auslesen in Java Allgemeine Java-Themen 7
S createTempFile erstellt keine temporäre Datei Allgemeine Java-Themen 13
Hatsi09 Jar datei ausführen verursacht NumberFormatException Allgemeine Java-Themen 9
kodela bestimmten Dateityp immer mit jar-Datei öffnen Allgemeine Java-Themen 17
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
B .txt Datei erstellen und auslesen bzw. schreiben Allgemeine Java-Themen 6
J Öffnen eine jar-Datei Allgemeine Java-Themen 11
Dann07 MP3 Datei abspielen funktioniert nicht Allgemeine Java-Themen 6
H ArrayListe in CSV Datei speichern Allgemeine Java-Themen 6
O Aus JAR-Datei erstellte EXE-Datei funktioniert nicht Allgemeine Java-Themen 10
N Txt Datei auslesen. Allgemeine Java-Themen 5
B Datei/Ordner auf Server zugreifen/erstellen Allgemeine Java-Themen 2
MiMa Datei verschieben hat einen Fehler?? Allgemeine Java-Themen 20
MiMa Erstellungsdatum einer Datei Allgemeine Java-Themen 10
O xlsx Datei auslesen mit POI Apache liest keine LEERZELLEN Allgemeine Java-Themen 6
P Input/Output entfernte Datei mit Java öffnen ohne Download Allgemeine Java-Themen 5
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
J Hilfe, Jar Datei kann nicht ausgeführt werden Allgemeine Java-Themen 2
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
O Java-Applikation tut in Netbeans, als JAR nicht, wegen Pfadangaben einer benötigten Datei Allgemeine Java-Themen 8
J Fehlermeldung bei Ausführung von .jar-Datei Allgemeine Java-Themen 9
J Die Letzte Zahl aus einer Text datei lesen Allgemeine Java-Themen 8
Elyt Compiler-Fehler Datei kann nicht erstellt werden. Die Syntax für den Dateinamen etc. ist falsch. Allgemeine Java-Themen 2
M Probleme jar datei. Allgemeine Java-Themen 2
F Datei in String-Array einlesen Allgemeine Java-Themen 8
O docx-Datei erzeugung mit DocXStamper funktioniert nicht Allgemeine Java-Themen 2
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
Bluedaishi Prüfen ob Datei noch geöffnet ist Allgemeine Java-Themen 59

Ähnliche Java Themen

Neue Themen


Oben