Datei verschlüsselt speichern

Talbot

Grünschnabel
Hi, ich schreibe gerade eine Anwendung bei der man Benutzerdaten angeben muss. Diese schreibe ich zur Zeit mit der Klasse "properties" in eine Datei. Da die Settings da ja im Klartext gespeichert werden, eignet sich das nicht gerade zum speichern von Passwörten.

Ich habe auch schon rumgegooglet und habe die Java-Klasse Cipher gefunden. Damit kann man ja prima Verschlüsselungsalgorithmen nutzen um private und öffentliche Schlüssel zu erzeugen um damit Filestreams zu verschlüsseln.

Ich möchte nun ein Schlüsselpaar fest im Quelltext verankern das benutzt wird um die Einstellungen verschlüsselt in eine Datei zu schreiben und beim Programmstart wieder zu laden. Die Frage ist wie?

Ich habe leider nur Anleitungen gefunden die ein einmaliges Schlüsselpaar erzeugen das bei jedem Anwendungsstart neu generiert wird. Ein neues paar passt dann natürlich nicht auf meine Einstellungsdatei.

Kann mir jemand helfen? Das wäre dufte.
 
Hi,
ich habe keine Ahnung von Verschlüsselungen aber :
Ich wollte auch einmal Benutzerdaten sicher verschlüsselt speichern,allerdings ohne extra einen Schlüssel anzugeben. Ich wollte einfach Passwörter verschlüsseln und später prüfen ob das Eingegebene mit dem vorher Eingegebenen übereinstimmt.

Java:
private static String hex(byte[] array) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < array.length; ++i) {
			sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100)
					.toLowerCase().substring(1, 3));
		}
		return sb.toString();
	}

	private static String md5(String message) {
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			return hex(md.digest(message.getBytes("CP1252")));
		} catch (NoSuchAlgorithmException e) {
		} catch (UnsupportedEncodingException e) {
		}
		return null;
	}


Anwenden kann man es eigentlich nur so:

1: Jemand gibt Daten ein
2 Daten werden mit der md5 Methode verschlüsselt und gespeichert
3: Später gibt wieder jemand an seine Daten an
4: Man führt wieder die md5-Methode aus auf die eingegebenen Daten
5: Wenn die gespeicherten Daten mit den neu-verschlüsselten übereinstimmen waren die Daten richtig

Wie gesagt ist vorallem für PWs gut geeignet

Wenn du alle Daten verschlüsseln willst solltest du dir was anderes suchen.
 
MD5 ist schon länger nicht mehr gut für soetwas geeignet. Zum einen ist der MD5 Algorithmus keine Verschlüsselung, sondern bildet nur einen Hash-Wert, zum anderen ist das "brechen" eines solchen Hashes durch Rainbow-Tables nicht mehr so Zeit intensiv, wie es einmal war.

AES oder ähnliches eignet sich mehr für soetwas.
 
Ich möchte nun ein Schlüsselpaar fest im Quelltext verankern das benutzt wird um die Einstellungen verschlüsselt in eine Datei zu schreiben und beim Programmstart wieder zu laden. Die Frage ist wie?

Die Class-Dateien sind leicht zu decompilen. Also wieder in lesbaren source zu wandeln.

Für Passwörter benutzt man in der Regel den von Lastlord gewählten Weg. Daher man erstellt bei der Passwort-Eingabe eine Prüfsumme(Hash), welche man speichert Bei der nächsten Eingabe erstellt man wieder ein Hash und vergleicht nun nur den Hash.

Ein Hash ist (im Regelfall) ein Einweg-Verfahren, d.h. es ist normalerweise (oder nur mit sehr viel Aufwand) nicht möglich das original wieder zu gewinnen.
Als Algorithmus bietet sich zum Beispiel eine sha Variante an.
 
Ja, das Verfahren mit dem Hashwert ist mir bekannt. Ich muss allerdings einen Windows-Benutzernamen + Passwort speichern. Dieser wird benötigt um per DCOM OPC-Daten auszulesen. Dafür benutz ich die Utgard-Klassen vom OpenScada Projekt.
Aber das ist alles nicht so wichtig...
Jedenfalls funktioniert so eine einseitige Verschlüsselung da nicht, denn ich muss das verschlüsselt gespeicherte Passwort später aus der gespeicherten Datei auslesen. Die Benutzer sollen das Passwort für diesen Nutzer nicht ändern können. Nur ein Administrator der nochmal ein eigenes programminternes Passwort hat (da kann man das Hash-verfahren natürlich nutzen) darf diese Daten ändern.
 
Nein, ich lese Daten von einem OPC-Server aus. Die Daten sind nur für einen bestimmten Domänenbenutzer verfügbar. Dieser Benutzer soll im Programm gespeichert sein und zwar möglichst so, das ein normaler Benutzer nicht das Passwort sieht. Sollte sich die User/Pw- Kombi in der Domäne mal ändern, so möchte ich es erstens unseren Admins ersparen sich durch den Quelltext wurschteln zu müssen um diese Einstellungen zu ändern, und zweitens wurde hier ja auch bereits gesagt das kompilierte klassen anscheinend leicht dekompiliert werden können, so dass jeder der will das passwort nachlesen kann.

Edit: Das Problem ist also das ich die User/Pass-Kombi, die über die Anmelderechte beim OPCserver verfügt, beim Programmstart irgendwoher einlesen muss. Die mit einer ini unverschlüsselt zu speichern ist mir aber zu riskant und ich würde auch ganz schön Ärger von unserem Admin kriegen ;)
 
Zuletzt bearbeitet:
Ich hab es jetzt folgendermaßen gelöst.
Beim ersten Programmstart wird mittels SecretKey ein Schlüssel erzeugt. Diesen Schlüssel leg ich als Datei ab und les ihn bei späteren Programmstarts ein.

Der Schlüssel wird dann benutzt um die Einstellungen mittels Cipher verschlüsselt zu speichern und entschlüsselt wieder auszulesen.

Mir ist absolut bewusst, dass dieses Verfahren auch nicht sicher ist, schließlich kann sich jeder den Key einlesen um die Daten zu entschlüsseln. Aber dazu sind unsere Mitarbeiter zu faul und zu unwissend um herauszufinden wie das geht ;)

Wichtig ist schonmal, dass die Daten nicht im Klartext gespeichert werden.

Wenn jemand da noch ne bessere Idee hat, immer her damit.
 

Neue Beiträge

Zurück