Passwort verwenden ohne dass es im Quelltext steht

Status
Nicht offen für weitere Antworten.

Bogomier

Mitglied
Hallo,

gibt es eine Lösung, wie ich auf ein Passwort in einer Java-Klasse zugreifen kann, ohne dass es im Klartext, für jedermann lesbar, im Quellcode steht??

Habe schon die Suche strapaziert aber keine befriedigende Lösung gefunden...

Bin für jeden Hinweis dankbar.
 

madboy

Top Contributor
Kommt darauf an, was du machen wilst. Willst du eine Datenübertragung verschlüsseln oder dich authentifizieren, ...
Da gäbe es schon Möglichkeiten.

Als direkte Antort auf deine Frage würde ich aber sagen: nein

Edit: mit einem Hash könnte es auch klappen wie Der Müde Joe geschrieben hat. Kommt wie gesagt drauf an, was du mit dem Passwort machen willst.
 

Bogomier

Mitglied
Also,ich schreibe eine Anwendung, bei der eine Mail generiert und verschickt wird.

Um die Mail verschicken zu können, muss ich ja Username und Passwort irgendwo im Quelltext angeben. Nur wäre das nicht so toll, wenn die Mailkonto-Daten im Klartext im Code stehen...

Der User soll also nirgends die Daten eingeben sondern der Mailversand soll automatisch erfolgen.

Im Tutorial von jGuru zur JavaMailAPI steht, man kann die Daten aus einem verschlüsselten Config-File einlesen. Weiss aber nicht wie ich das anstellen soll.
 

madboy

Top Contributor
Wenn es ein Tutorial ist, frag doch den Ersteller :wink:
Oder poste mal nen Link oder Code. Bin grad n bisschen zu faul zum suchen
 

Murray

Top Contributor
Aber selbst wenn Benutzername und Password in einer verschlüsselten Datei stehen, dann steht doch der Mechansimus zum Entschlüsseln wieder im Quelltext, so dass jemand, der Zugriff auf den Quelltext und die Datei hat, doch wieder an die Klartexte kommt.
 
G

Gast

Gast
habs nur kurz überflogen, aber es sieht so aus, als bräuchte die session das passwort im klartext.

die einfachste variante ist jetzt, dass du in PasswordAuthentication#getPassword ne kleine entschlüsselung einbaust und das passwort entsprechend verschlüsselt in nem string vorhältst. sicher ist das nicht, aber es verhindert zumindest, dass das passwort schon direkt im class file in reintext steht.

die nächste stufe wäre, dass passwort von einem servlet liefern zu lassen, das auf deinem eigenen server rennt. dann müsste nen cracker schon die kommunikation sniffen oder nen memory dump der vm durchforsten, um das passwort zu finden.

und die dritte stufe ist, das mail versenden komplett an nen servlet zu übergeben und den client nur den inhalt senden zu lassen. auslagerung ist die einzig sichere art, inhalte zu schützen.
 

Bogomier

Mitglied
Danke für die antworten.

Die Situation ist die, dass andere Leute (in diesem Falle meine Profs.) Zugriff auf alle Quelltexte haben.

Somit bringt die Auslagerung in andere Quelldateien leider nicht viel.

So wie ich das sehe, kann ich es dann auch gleich im Klartext drin stehen lassen...
 
G

Guest

Gast
Guck dir mal die Klasse javax.crypto.Cipher.java an. Damit kannst du byte[] ver- und entschlüssel.

Das wird bei uns z. B. genutzt um JAR-Files zu erzeugen, in denen verschlüsselte Dateien liegen. Wenn man den Algorythmus der Verschlüsselung kennt (der dann bei dir ja im Quelltext stehen würde) kann man zwar die Daten trotzdem entschlüsseln, im Ganzen ist das aber immer noch "sicherer" als das Passwort gleich im Quelltext zu schreiben, da man es halt erst vorsätzlich entschlüsseln müsste um den genauen Text zu erfahren.
 

MasterEvil

Bekanntes Mitglied
Wie wäre es mit einem anonym zu nutzenden popServer oder so?
Ansonsten, wie der Gast schon sagte, einfach nur den Mailinhalt an den Server per Servlet oder php-Script, ist ja kein großer Aufwand!
 

Xams

Bekanntes Mitglied
Oder du verschlüsselst die ganze Klasse und schreibst einen Classloader, der sie bei Verwendung wieder entschlüsselst.
Diesen Loader packst du mit einigen anderen unsinnigen Klassen versteckt in ein package ala my.mail.test. Da packst du dann einige Klassen rein und nennst die Test1, Test2, Test3,... und darunter ist auch dein KLassloader.
Klingt kompliziert, ich weiß.
Das verhindert aber, das jemand deine Klasse einfach decompiled.
MFG
 

L-ectron-X

Gesperrter Benutzer
Ein Obfuscator macht aber doch nur Namen von Klassen und Variablen unkenntlich. Ein String würde dennoch lesbar bleiben...
 

André B.

Bekanntes Mitglied
Das ist klar. Mir ging es mehr um den Klassenlader, den er so nicht unbedingt zwischen 5 Klassen mit dem Namen Testx verstecken muss.
Mfg André
 
G

Guest

Gast
Der Müde Joe hat gesagt.:
hashe das Passwort und vergleiche den Hashwert des eingegebenen Passwortes mit dem Hashwert des Pw im Quellcode
Das ist die Methode der Wahl. Aus dem Hash des Passwortes ist das Passwort NICHT mehr identifizierbar. So macht das z.B. auch UNIX. Da stehen die Hashes der Passwörter in einer Datei.

Wichtig ist dabei nur, dass Du eine kryptografische Hash-Funktion verwendest und nicht etwa die hashCode()-Methode der Klasse String, die hat mit dem ganzen nämlich nix zu tun :)

Fred
 

Murray

Top Contributor
Anonymous hat gesagt.:
Der Müde Joe hat gesagt.:
hashe das Passwort und vergleiche den Hashwert des eingegebenen Passwortes mit dem Hashwert des Pw im Quellcode
Das ist die Methode der Wahl. Aus dem Hash des Passwortes ist das Passwort NICHT mehr identifizierbar. So macht das z.B. auch UNIX. Da stehen die Hashes der Passwörter in einer Datei.

Natürlich wäre das eine Lösung - allerdings setzt die - ähnlich wie die Idee mit dem Auslagern der Mail-Funktionalität in ein Servlet - voraus, dass auf der Serverseite eine neue Infrastruktur vorgeschaltet wird, die dann wieder das gleiche Problem hat: der Mailserver braucht zur Authentifizeriung nunmal das Passwort im Klartext. Man sichert dann zwar die Übertragungsstrecke; im konkreten Fall ging ja aber wohl darum, dass der TE verhindert wollte, dass sein Prof das Passwort - oder den Algo, wie man das Passwort ermitteln kann - irgendwo im Code sieht.
 
T

tuxedo

Gast
Das Problem ist doch fast analog zu dem Problem die Klassen so zu verschlüsseln dass ein decompilieren sogut wie unmöglich ist?!

Solange der Mailserver kein bereits verschlüsseltes Passwort entgegen nimmt muss entweder

a) das Passwort im Klartext verwendet werden
oder
b) das Passwort verschlüsselt im Code stehen, wobei es vor dem senden entschlüsselt werden muss und man somit mittels decompilieren wieder eine Anleitung zum entschlüsseln hat.

Auch das Passwort anderso auslagern macht wenig Sinn. Schließlich muss es von der Anwendung ja anfefordert werden. Und nach dem decompilen hat man auch dazu wieder die Anleitung.

- Alex
 

moormaster

Top Contributor
Kannst du mal erklären, wo dein Programm läuft und zu welchem Zweck es dient?

Falls das Programm beim Nutzer lokal läuft: Wäre es nicht machbar, dass jeder Nutzer seine eigenen Zugangsdaten von seinem Mailprovider eingeben muss, damit die Mails verschickt werden können? Dann würden die Zugangsdaten lokal bei jedem Nutzer in irgendeiner Config-Datei auf der Festplatte schlummern und niemand muss deine Zugangsdaten erfahren.
 

Murray

Top Contributor
moormaster hat gesagt.:
Kannst du mal erklären, wo dein Programm läuft und zu welchem Zweck es dient?

Falls das Programm beim Nutzer lokal läuft: Wäre es nicht machbar, dass jeder Nutzer seine eigenen Zugangsdaten von seinem Mailprovider eingeben muss, damit die Mails verschickt werden können? Dann würden die Zugangsdaten lokal bei jedem Nutzer in irgendeiner Config-Datei auf der Festplatte schlummern und niemand muss deine Zugangsdaten erfahren.

Bogomier hat gesagt.:
Der User soll also nirgends die Daten eingeben sondern der Mailversand soll automatisch erfolgen.
 
T

tuxedo

Gast
Muss denn die Mail zwingend über einen fest definierten Mailserver erfolgen? Geht's nicht dass der User einmal konfiguriert über welchen Mailserver mit welchem Benutzer und Passwort die Email gesendet werden soll?

- Alex
 

moormaster

Top Contributor
Ok :D

Also wie gesagt wenn sich jeder die Anwendung lokal installiert, dann sollte man vielleicht drüber nachdenken, ob nicht jeder seine eigenen Zugangsdaten für Mailversand nutzen können sollte.

Falls das Programm eine Art Online-Service darstellt, dann würde ich mich dem Anschliessen, dass man sich einen Server im Internet einrichtet, welcher die zu versendenen Mails entgegennimmt und absendet, ohne dass Passwörter zu diesem Server hin übertragen werden müssen.

Falls du unbedingt in deinem Programm Zugangsdaten unterbringen musst: Kann man sich dafür nicht einen extra FreeMail Account machen, der nur dafür angemeldet wurde? So dass man sozusagen keinen Nutzen von dem Passwort hat? (Ausser jemand nutzt das Passwort, um in den Einstellungen beim Free-Mail-Account herumzufuschen :D)
 

Bogomier

Mitglied
War ja einiges los hier :D

Also das Programm ist Teil einer Public-Key-Infrastruktur.

Der User gibt Daten in ein Web-Formular ein, im Hintergrund wird ein Zertifikat (aus den User-Daten) für einen öffentlichen Schlüssel für Public-Key-Kryptographie erstellt und das Zertifikat wird anschließend per Mail verschickt.

Die Quellen liegen also auf dem Server. Der juser hat gar nix mit Konfiguration zu tun, sondern gibt nur seine Mailadresse als Empfänger ein.

Problem ist nur dass meine Profs zur Beurteilung Einsicht in den Quellcode haben. Daher habe ich mich gefragt wie man das lösen kann, ohne dass die Profs in irgendeiner Form Zugang zu den Klartext-Account-Daten haben (Nicht dass ich meinen Profs böse Absichten unterstellen würde :) )


moormaster hat gesagt.:
Falls du unbedingt in deinem Programm Zugangsdaten unterbringen musst: Kann man sich dafür nicht einen extra FreeMail Account machen, der nur dafür angemeldet wurde? So dass man sozusagen keinen Nutzen von dem Passwort hat? (Ausser jemand nutzt das Passwort, um in den Einstellungen beim Free-Mail-Account herumzufuschen :D)

Das ist momentan mein Stand der Dinge. So werde ich es wohl handhaben. Alles andere ist irgendwie eine Verlagerung des Problems, wie ich das sehe.

Danke für eure Vorschläge, wenn jetzt nicht noch die ultimative Lösung kommt, belasse ich es dabei, wie eben geschildert.
 

moormaster

Top Contributor
Mal ne andere Frage: Kann man nicht auf dem gleichen Server, wo das Programm läuft, einfach einen SMTP Server installieren und dann diesen nutzen, um die Mails zu versenden?
 

Bogomier

Mitglied
ja wäre sicher möglich und ne gute lösung. Allerdings müsste ich mich da erst in Mailserver-Geschichten einarbeiten, wofür mir die Zeit fehlt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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 Passwort in Datei speichern - wie? Allgemeine Java-Themen 31
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
S Erstellung einer verschlüsselten Passwort Datei Allgemeine Java-Themen 11
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
S Passwort geschützte Excel Datei öffnen (POI) Allgemeine Java-Themen 4
G Blind-Datei (Passwort auslesen) Allgemeine Java-Themen 5
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
E TextField/Passwort Allgemeine Java-Themen 5
F Java Passwort abfrage Allgemeine Java-Themen 2
D sicheres hardgecodetes passwort? Allgemeine Java-Themen 18
G Zip Datei - Passwort schützen Allgemeine Java-Themen 13
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
J Welchen Packager soll ich verwenden. Allgemeine Java-Themen 7
H lokale Variable bei Optional verwenden Allgemeine Java-Themen 11
M Exceptions - wann / wie verwenden? Allgemeine Java-Themen 4
S Array dynamisieren oder ArrayList verwenden? Allgemeine Java-Themen 17
bueseb84 Git : Mehrere Server verwenden Allgemeine Java-Themen 3
W Was genau sind IOTools? Kann ich stattdessen nicht die Scanner Klasse verwenden? Allgemeine Java-Themen 3
D Klassen JLabels in anderen Klassen verwenden. Allgemeine Java-Themen 7
D API Keys mehrmals verwenden Allgemeine Java-Themen 6
K For-Schleife <> oder != Operator verwenden? Allgemeine Java-Themen 2
J Eigene Api erstellen und dann auch verwenden - Ordnerstruktur Allgemeine Java-Themen 1
J PDFBox kommerziell verwenden Allgemeine Java-Themen 15
S Variablen split-Funkton mit zwei Variabeln verwenden? Allgemeine Java-Themen 4
K jar-Datei lässt sich unter Windows nicht verwenden Allgemeine Java-Themen 3
M Java Mail verwenden Allgemeine Java-Themen 20
Neumi5694 Interface Generics für Enum-Filterung verwenden Allgemeine Java-Themen 5
J Interface Wofür Interfaces in Java verwenden? Allgemeine Java-Themen 3
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
O 3D-Grafik java3D in eclipse verwenden Allgemeine Java-Themen 0
J Allgemein gültige Klasse/Methode mehrfach verwenden Allgemeine Java-Themen 11
R Threads ReentrantLock mehrfach verwenden Allgemeine Java-Themen 3
J Interface Interface für Framework verwenden Allgemeine Java-Themen 4
G Services verwenden sich gegenseitig Allgemeine Java-Themen 4
R Dateimanager verwenden Allgemeine Java-Themen 2
P Variablen Variable von void im ActionListener verwenden Allgemeine Java-Themen 3
N VB Code in Java verwenden Allgemeine Java-Themen 5
P java.nio.file unter Java 6 verwenden Allgemeine Java-Themen 4
A Klassen String Array in anderer Klasse verwenden Allgemeine Java-Themen 11
P JDK installieren Mac OS X - JDK7 in Eclipse Juno verwenden Allgemeine Java-Themen 3
L Eine jar verwenden, die intern auf eine andere jar zugreift Allgemeine Java-Themen 7
S Aus Programm Klasse erstellen und verwenden Allgemeine Java-Themen 10
R Collections CopyOnWriteArrayList - wie genau verwenden Allgemeine Java-Themen 7
M Lock Datei intelligent verwenden Allgemeine Java-Themen 4
J Eure Meinung: Threads verwenden, oder nicht? Allgemeine Java-Themen 6
X Threads Thread mehrmals verwenden Allgemeine Java-Themen 4
G JGoodies Binding oder EventBus verwenden? Allgemeine Java-Themen 11
E Kann nicht gesamten HeapSpace verwenden Allgemeine Java-Themen 5
A Eigenen OutputStream schreiben und verwenden Allgemeine Java-Themen 9
M Poi-Excel: vorhandene Formatierung verwenden Allgemeine Java-Themen 2
B boolean return typ verwenden? Allgemeine Java-Themen 5
R ResourceBundle in Servlets verwenden Allgemeine Java-Themen 13
A Welche Exception verwenden? Allgemeine Java-Themen 2
R Java function die Strings escaped, sodass ich sie in Javascript verwenden kann? Allgemeine Java-Themen 4
MQue Vector<..> nicht verwenden Allgemeine Java-Themen 4
T Pfad aus Dateilesen -> wie diesen Pfad verwenden! Allgemeine Java-Themen 13
R in einem neuen Runnable() eine lokale Varibale verwenden Allgemeine Java-Themen 2
G dll verwenden Allgemeine Java-Themen 2
A Bestimmte JVM verwenden Allgemeine Java-Themen 13
R array.length in For-Schleife verwenden? Allgemeine Java-Themen 22
F Generics: spricht etwas dagegen raw types zu verwenden? Allgemeine Java-Themen 31
D Lostus Notes Adressbuch in eine Java-Webanwendung verwenden Allgemeine Java-Themen 4
G JasperReports: Verwenden von vorkompilierten Reports Allgemeine Java-Themen 2
ToNyXXL Als Mauszeiger eigenes Bild verwenden! Allgemeine Java-Themen 3
A Windows Bitmap-Handle in Java verwenden Allgemeine Java-Themen 2
G Ab wann Datenbank verwenden Allgemeine Java-Themen 15
D .dlls mit Java verwenden Allgemeine Java-Themen 2
M JNI mit vorhandenen libs oder dlls verwenden Allgemeine Java-Themen 2
N Klasse die in C geschrieben wurde in Java verwenden? Allgemeine Java-Themen 20
H Tastatur eingaben verwenden Allgemeine Java-Themen 30
E Statt HashSet die TreeSet verwenden Allgemeine Java-Themen 4
G eigene klassen die ein jar verwenden als neues jar erstellen Allgemeine Java-Themen 4
M java klassen beerben u. den gleichen namen verwenden?(Naming Allgemeine Java-Themen 6
S Änderungen im Source-Code direkt verwenden können? Allgemeine Java-Themen 3
R Sofort "eth0" verwenden Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben