Erste Schritte Verschlüsselung von text

muemme

Mitglied
Hallo,
ich möchte mit Hilfe von Java ein Programm schreiben, das Text verschlüsseln kann. Hierbei soll die Verschlüsselung nicht so simpel wie das ROT-Verfahren sein, sondern mit einem Schlüssel (wie es heutzutage üblich ist). Wo könnte ich mich dazu belesen wie das funktioniert, bzw kann es mir jemand hier erklären?^^.
Vielen Dank im Vorraus!
 

Java20134

Bekanntes Mitglied
Am sinnvollsten würde ich dann das AES Verfahren finden, da es hauptsächlich genutzt wird. Dazu gibt es ein sehr gutes Tutorial. Außerdem gibt es dazu auch ein RSA Tutorial. Damit hast du alle wichtigen Verschlüsselungen, die man heutzutage nutzt.
 

Thallius

Top Contributor
Verschlüsselung ist im Java Umfeld immer ein schweres Thema. Da man den Sourcode eine Java Programmes immer sehr einfach dekompilieren kann ist es quasi unmöglich etwas wirklich brauchbar zu verschlüsseln.

Interessant wird Verschlüsselung im Java Bereich erst wenn wir von Frontend - Backend Lösunen reden. Hier kann es Sinn machen die Daten, welche man an das Backend schickt, vorher zu verschlüsseln um einem MITM keine Angriffsfläche zu bieten. Hier ist es natürlich am einfachsten auf fertige Lösungen wie TLS zu setzen. Wenn man es denn, zu Lernzwecken, doch mal selber machen will, sollte man eine asynchrone Verschlüsselung wie RSA benutzen, da dort der Java Client den Schlüssl zum Entschlüsseln nicht kennen muss und somit ein Dekompilieren des Codes nichts nutzt.

So ich denke jetzt hast du genug Schlagworte zum Googlen und lernen.

Viel Spaß

Claus
 

Thallius

Top Contributor
Was eigentlich total irrelevant ist, da man den Schlüssel ja gefälligst nicht im Code zu hinterlegen hat.

Wo bitte willst du ihn denn hinlegen? Auf den Server? Dann dekompilieren ich den Code der den Schlüssel anfordert und hole ihn mir vom Server. In irgendeine Datei? Noch sinnloser. Einzige Möglichkeit : den Schlüssel gar nicht speichern sondern jedesmal vom User von Hand eingeben lassen. Sehr kompfortabel....

Gruß

Claus
 

AndyJ

Bekanntes Mitglied
Verschlüsselung ist im Java Umfeld immer ein schweres Thema. Da man den Sourcode eine Java Programmes immer sehr einfach dekompilieren kann ist es quasi unmöglich etwas wirklich brauchbar zu verschlüsseln.
Unsinn, mit Java kann man genauso gut Programme schreiben, die Krytographie verwenden wie mit jeder anderen Programmiersprache. Ein Grundsatz beim Verschluesseln ist, dass nur der Key geheimgehalten werden muss. Die Algorithmen sind oeffentlich bekannt und so soll es auch sein. Deswegen ist es auch vollkommen irrelevant, ob jemand das Programm dekompiliert. Idealerweise stellt man in solchen Faellen naemlich sowieso den Sourcecode zur Verfuegeung.

Eines der besten (wenigen) Buecher zum Thema: https://www.amazon.de/Java-Cryptogr...3&sr=8-1&keywords=java+cryptography+extension

Das hier ist auch net schlecht, aber leider bezieht es sich auf eine voellig veraltete Version von Bouncycastle: https://www.amazon.de/Beginning-Cry...coding=UTF8&psc=1&refRID=BYJTXSQBS3NSBCSNPVNK

Cheers,
Andy
 

AndyJ

Bekanntes Mitglied
Wo bitte willst du ihn denn hinlegen? Auf den Server? Dann dekompilieren ich den Code der den Schlüssel anfordert und hole ihn mir vom Server. In irgendeine Datei? Noch sinnloser. ...
Kryptographische Keys werden fast immer in Files gespeichert, bekanntestes Format ist vermutlich PKCS#12 fuer assymetrische Keys. In Java gibt es nocht mehr, z.B. JKS. Den Schutz uebernimmt entweder die Rechteverwaltung des Betriebssystems oder man schuetzt es mit einem Passwort.

Cheers,
Andy
 

Thallius

Top Contributor
Kryptographische Keys werden fast immer in Files gespeichert, bekanntestes Format ist vermutlich PKCS#12 fuer assymetrische Keys. In Java gibt es nocht mehr, z.B. JKS. Den Schutz uebernimmt entweder die Rechteverwaltung des Betriebssystems oder man schuetzt es mit einem Passwort.

Cheers,
Andy

Ähm wollt ihr mich jetzt verarschen oder was?

Ein Grundsatz beim Verschluesseln ist, dass nur der Key geheimgehalten werden muss

Kryptographische Keys werden fast immer in Files gespeichert

und wo ist jetzt das Poblem alle mit einem Java Programm verschlüsselte Daten einfach wieder zu entschlüsseln wenn ich das Key File auf dem Rechner habe oder einfach mal im Java Code nachsehen kann wie ich ihn über einen Webservice anfordere?

Ich bleibe dabei. Sobald der private key in irgendeiner Form dem Java Programm zugänglich gemacht werden muss, weil das Java Programm die Daten nicht nur ver- sondern auch entschlüsseln können muss, kann man sich das Verschlüsseln auch gleich sparen.

Claus
 

mrBrown

Super-Moderator
Mitarbeiter
Ich bleibe dabei. Sobald der private key in irgendeiner Form dem Java Programm zugänglich gemacht werden muss, weil das Java Programm die Daten nicht nur ver- sondern auch entschlüsseln können muss, kann man sich das Verschlüsseln auch gleich sparen

Streich das "Java" mal aus dem Text, das ist überflüssig.
 

tommysenf

Top Contributor
Ich bleibe dabei. Sobald der private key in irgendeiner Form dem Java Programm zugänglich gemacht werden muss, weil das Java Programm die Daten nicht nur ver- sondern auch entschlüsseln können muss, kann man sich das Verschlüsseln auch gleich sparen.
Kann man dann davon ausgehen, das es nach deiner Argumentation auch keine sichere OpenSource Software zur Verschlüsselung existieren kann? Schließlich spart man sich hierbei sogar das dekompilieren...
 

Thallius

Top Contributor
Kann man dann davon ausgehen, das es nach deiner Argumentation auch keine sichere OpenSource Software zur Verschlüsselung existieren kann? Schließlich spart man sich hierbei sogar das dekompilieren...

Noch einmal. Wenn ich die Daten irgendwohin verschicken will (also sie von meinem oder halt irgendjemandem seinem PC an einen anderen PC schicke) dann macht es Sinn diese zu verschlüsseln. Eine Verschlüsselung um die Daten gegen das Lesen des Users der am PC selber sitzt zu schützen kann nicht funktionieren, es sei denn der User muss einen Salt immer eintippen bevor er auf die Daten zugreifen will, wie es z.B. Passwort-Reminder-Programme tun.
Genauso wenig macht es Sinn Daten gegen Änderungen am lokalen PC zu hashen oder zu verschlüsseln solange irgendeine Software auf diesem PC in der Lage sein muss diese Daten zu ändern. Dann braucht er nämlich den private key. Ab hier befinde ich mich in der "So gut es geht" Zone. Und da ist Java nunmal ganz weit unten angesiedelt. Einen key in Java zu verstecken, so dass ihn nicht jeder möchtegern Hacker in 1h gefunden hat ist nahezu unmöglich. Wobei ich wette, dass ich einen Key in einem C-Programm so gut verstecken kann, dass selbst ein guter Programmierer da einen Tag oder länger suchen muss.

Gruß

Claus
 

mrBrown

Super-Moderator
Mitarbeiter
Wie gut, dass die Frage war, wie gut man Keys in Javaprogrammen verstecken kann, und nicht, wie man mit einem Javaprogramm irgendwas verschlüsseln kann...
 

thet1983

Top Contributor
@muemme
brauchst du eine vorlage?
ich hab ein projekt das ich dir schicken kann ( für Eclipse )
Verschlüsselung AES SHA-1 ( <-- ich weiß, ist veraltet )
Methden der Klasse
Java:
public SecretKeySpec generateKeyWithPassword(String passwordString) throws Exception
// ... für die generierung
public SecretKey generateRandomKey() throws Exception
public void writeKeyInFile(File file, SecretKey key) throws Exception
public SecretKey readKeyFormFile(File file) throws Exception
// ...

public String encodeText(String clearText, SecretKey key) throws Exception

public String decodeText(String encodedText, SecretKey key) throws Exception

public void encryptFile(SecretKey key, File inputFile, File outputFile) throws Exception

public void decryptFile(SecretKey key, File inputFile, File outputFile) throws Exception

ich bin kein profi programmierer!
aber bei meinen projekten verwende ich das immer.....
 

mrBrown

Super-Moderator
Mitarbeiter
Etwas OT:

throws Exception ist aber ganz böse ;)

Und die Methoden würde ich ja vereinheitlichen - encode vs. encrypt, mal SecretKey, mal Text, mal File vorn...
 

thet1983

Top Contributor
"jo mai"...ist ja auch schon ein älteres modell
und da sowieso nur ich das verwende ist das auch sozusagen "powidl"
ausserdem funktioniert es so wie es soll...
 

tommysenf

Top Contributor
Wobei ich wette, dass ich einen Key in einem C-Programm so gut verstecken kann, dass selbst ein guter Programmierer da einen Tag oder länger suchen muss.
Damit würdest du dann aber auch den größten Security Faux Pax überhaupt begehen.

sei denn der User muss einen Salt immer eintippen bevor er auf die Daten zugreifen will
Alles andere macht ja auch keinen Sinn.

Die Frage warum Java schlechter geeignet sein soll einen Verschlüsselungssoftware zu implementieren als zum Beispiel TrueCrypt welches im Quelltext vorliegt, konntest du mir leider bisher noch nicht beantworten...
 

mrBrown

Super-Moderator
Mitarbeiter
Ich gebs ehrlich gesagt auch auf. Wenn du es nicht verstehen willst oder kannst dann ist das eben so
Der mit Verständnis-Problemen bist er du ;)

die Ausgangssituation war, mit Java mit übergebenem Schlüssel irgendetwas zu verschlüsseln, nicht den Schlüssel oder irgendwas anderes im Code zu verstecken.
Von daher geht so ziemlich alles was von dir kam völlig am Thema vorbei - oder ist einfach nur schädlich. Schlüssel haben in *keinem* Code was zu suchen, auch nicht in C-Code - das ist nur eins: grob Fahrlässig.
Der Algorithmus dagegen hat öffentlich zu sein - völlig egal ob in Java, C oder Shakespeare
 
X

Xyz1

Gast
Ach, das Thema ist gar nicht so unkomplex. Nicht umsonst beschäftigen sich Experten jahrelang damit. Man kann aber festhalten:
- Java ist zwar langsam, eignet sich aber auch hervorragend für Verschlüsselung
- Geheime Schlüssel sollten nicht obfuskiert werden
- Wenn doch, und du wirklich was Wichtiges zu verstecken hast, nehm se sie dir das Ding auseinander :(
 

dzim

Top Contributor
Langsam ist nicht Java an sich, sondern die Implementierung der Schlüssel. Zumal In Java IMHO erst mit Java9 (wenn es denn mal kommt) auch die Möglichkeit geschaffen wurde, die in die CPU gegossenen Methoden einiger Verschlüsselungstypen zu nutzen. Bis dato musst alles weitestgehend in Software umgesetzt werden. Dadurch ist es prinzipbedingt sicher langsamer als in anderen Sprachen, und gleichzeitig auch Resourcenintensiver.
(Ich musste mal einen Lasttest machen, der ziemlich krasse (und viele) Verschlüsselungen machen musste und dadurch vergleichbar viel Hardware für die gewünschten Userzahlen benötigte, wo ich sonst mit nur einem PC hinkomme.)

Verschlüsselung in Java als per se unmöglich darzustellen ist falsch und die hier entbrannte Diskussion dürfte den TO reichlich verunsichert haben.

Es ist eben wichtig, dass das entschlüsseln nur mit private Keys auf Empfängerseite gemacht wird (z.B. das genannte PKCS12 und egalob Client oder Server). Das einzige Kriterium ist, wie generell bei asymetrischen Verschlüsselungen, dass dem Programm, das für den Empfänger verschlüsselt, nur den Public Key kennt. Damit ist, solange das Verfahren nicht geknackt wurde, Verschlüsselung in jeder belieben Sprache möglich (wenn die Verfahren korrekt implementiert sind).

In oben genannten Lasttest verwendeten wir ein SDK, das speziell für Android geschrieben wurde und welches ein Dummy-Zertifikat für die Registrierung verwendet und über SCEP die eigentliche Generierung des Client-Zertifikats eigentlichen und die anschliessende Signierung durch den Server abwickelt.
Alle weitere Kommunikation findet dann über das lokale Zertifikat statt, von dem der Server nur den Public Key kennt.
In dem Lasttest (im Bankensektor) musste dann noch zusätzlich zu dem der eigentliche "spannende" Traffic über einen SOAP-WS mit Web-Service-Security erstellt und über HTTPS übertragen werden (Vorgabe im Bankenwesen, wenn Kreditkarten-Daten involviert sind: Verschlüsselung des Cotnent (WSS) und des Transports (HTTPS)) - das hat die Lastgeneratoren reichlich in die Knie gezwungen, weil hier eben die Performance in Java nicht so gut ist. Aber eben: Die Performance, nicht die Verschlüsselung an sich.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Cäsar Verschlüsselung Java Basics - Anfänger-Themen 8
Camoflasche RSA Verschlüsselung Java Basics - Anfänger-Themen 0
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
M Verschlüsselung mit replace() Java Basics - Anfänger-Themen 35
P Cäsear verschlüsselung irgendwas passt noch nicht Java Basics - Anfänger-Themen 2
A Methoden Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 13
E Einfache Java Verschlüsselung Java Basics - Anfänger-Themen 4
N Erste Schritte JFrame Caesar-Verschlüsselung Java Basics - Anfänger-Themen 23
Y Caesar Verschlüsselung Fehler Java Basics - Anfänger-Themen 4
Ä Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 5
N Caesar Verschlüsselung Java Basics - Anfänger-Themen 2
L Interpreter-Fehler RSA Verschlüsselung Fehler Java Basics - Anfänger-Themen 2
M Erste Schritte Verschlüsselung / Login-Sicherheit Java Basics - Anfänger-Themen 8
D Eine einfache Verschlüsselung schreiben Java Basics - Anfänger-Themen 3
A Vigenere Verschlüsselung Java Basics - Anfänger-Themen 2
B RSA Verschlüsselung für Aktivierunscode Java Basics - Anfänger-Themen 7
T Array Verschlüsselung Java Basics - Anfänger-Themen 5
Z Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 1
V Permutation, Verschlüsselung Java Basics - Anfänger-Themen 19
H Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 1
S Caesar Verschlüsselung Start Hilfe Java Basics - Anfänger-Themen 4
K Symmetrische Verschlüsselung von TextArea Java Basics - Anfänger-Themen 7
U Problem mit Verschlüsselung Java Basics - Anfänger-Themen 2
C Frage zu RSA-Verschlüsselung Java Basics - Anfänger-Themen 3
Y Applet: Verschlüsselung Java Basics - Anfänger-Themen 3
H Caesar-Verschlüsselung - Was stimmt nicht? Java Basics - Anfänger-Themen 6
V Ceasar Verschlüsselung Java Basics - Anfänger-Themen 9
D Verschlüsselung mit Java Java Basics - Anfänger-Themen 8
F Problem: Verschlüsselung von String in Array Fehler Java Basics - Anfänger-Themen 2
C Verschlüsselung Java Basics - Anfänger-Themen 8
R Frage zu Cäsar - Verschlüsselung! Java Basics - Anfänger-Themen 10
I Rc4 Verschlüsselung in BlueJ Java Basics - Anfänger-Themen 18
D Verschlüsselung Java Basics - Anfänger-Themen 4
C Compiler-Fehler Verschlüsselung Java Basics - Anfänger-Themen 2
B byte-weise Verschlüsselung Java Basics - Anfänger-Themen 6
S Caesar-Verschlüsselung Problem/Frage Java Basics - Anfänger-Themen 4
D Java Password verschlüsselung Java Basics - Anfänger-Themen 6
P RSA Verschlüsselung kleines Problem Java Basics - Anfänger-Themen 5
R Verschlüsselung von String Java Basics - Anfänger-Themen 4
J Cäsar Verschlüsselung Java Basics - Anfänger-Themen 12
G Verschlüsselung und Entschlüsselung von Texten Java Basics - Anfänger-Themen 7
D Java Verschlüsselung Java Basics - Anfänger-Themen 8
O Verschlüsselung mit Cipher & Key Java Basics - Anfänger-Themen 9
A Vigenere Verschlüsselung Java Basics - Anfänger-Themen 2
K Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 1
S Hill Verschlüsselung Java Basics - Anfänger-Themen 10
A Einfache java Verschlüsselung HILFE Java Basics - Anfänger-Themen 3
W Xor-Verschlüsselung Java Basics - Anfänger-Themen 15
Y verschlüsselung Java Basics - Anfänger-Themen 10
T Frage zur Verschlüsselung (RSA) Java Basics - Anfänger-Themen 6
A Java Verschlüsselung/Cipher Java Basics - Anfänger-Themen 12
S Verschlüsselung Key Splitting Java Basics - Anfänger-Themen 2
B Again, Verschlüsselung Java Basics - Anfänger-Themen 3
M Caeser Verschlüsselung ganz einfach(nicht für mich) Java Basics - Anfänger-Themen 6
L Frage zur Verschlüsselung in java Java Basics - Anfänger-Themen 3
D Verschlüsselung Java Basics - Anfänger-Themen 4
A verschlüsselung Java Basics - Anfänger-Themen 7
G Vergleich bei MD5-Verschlüsselung Java Basics - Anfänger-Themen 3
zilti md5-Verschlüsselung? Java Basics - Anfänger-Themen 7
L Caesar-Verschlüsselung programmieren Java Basics - Anfänger-Themen 12
Lazybone Vigenere Verschlüsselung funktioniert nicht richtig Java Basics - Anfänger-Themen 8
S XOR-Verschlüsselung Java Basics - Anfänger-Themen 5
U "Einfache Verschlüsselung" Java Basics - Anfänger-Themen 17
K Verschlüsselung Java Basics - Anfänger-Themen 8
E Verschlüsselung mithilfe von Array Java Basics - Anfänger-Themen 2
S SHA? Hashcodes, Blowfish Verschlüsselung Java Basics - Anfänger-Themen 7
L Java und PGP Verschlüsselung, wie...??? Java Basics - Anfänger-Themen 2
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
A Edit Text Negative Decimalzahlen Java Basics - Anfänger-Themen 18
P Aus Text Datei nur Zahlen übernehmen Java Basics - Anfänger-Themen 13
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
R Text in der DB abspeichern, und danach bearbeiten Java Basics - Anfänger-Themen 5
A JTextArea entfernen und durch neuen Text ersetzen Java Basics - Anfänger-Themen 8
JavaBeginner22 Button Text verändern Java Basics - Anfänger-Themen 1
GoenntHack Java Text von JLabel verändert sich nicht Java Basics - Anfänger-Themen 1
A Text zu Morsecode Java Basics - Anfänger-Themen 8
O Java Text Area Zeilenausgabe Java Basics - Anfänger-Themen 7
M Text wird in der Console nicht ausgegeben. Java Basics - Anfänger-Themen 11
berserkerdq2 An selbst ersteller txt Datei immer Text dranhängen, ohne den vorherign Text zu löschen Java Basics - Anfänger-Themen 8
M Text in Datei schreiben Java Basics - Anfänger-Themen 9
T208 Text Datei individuell benennen. Java Basics - Anfänger-Themen 5
A Werten aus dem Text ausliesten Java Basics - Anfänger-Themen 6
K Jlabel mit itemlistevent Text gegeben, wird nicht angezeigt Java Basics - Anfänger-Themen 5
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
O Text mit Regex trennen und wieder zusammenbauen Java Basics - Anfänger-Themen 5
xFlozen Text mehrspaltig ausgeben Java Basics - Anfänger-Themen 3
S Zufällige ungerade Zeile aus Text-Datei lesen Java Basics - Anfänger-Themen 5
K Rekursiver Vergleich von Textmuster und Text Java Basics - Anfänger-Themen 2
C Variablen Provided text for message may not be null Java Basics - Anfänger-Themen 9
H Klassen Die Länge einer Text-Node bestimmen Java Basics - Anfänger-Themen 2
F Erste Schritte java.util.Scanner: Beliebig langen Text per Paste in Console eingeben ? Java Basics - Anfänger-Themen 14
GermanPie Discord Text Channel erstellen? Java Basics - Anfänger-Themen 1
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
yoskaem Text Color durch Klicken eines Buttons in anderer Activity ändern Java Basics - Anfänger-Themen 2
B Alle Links in einem Text suchen und ersetzen mit einem neuen Link Java Basics - Anfänger-Themen 18
J Java TextArea Text bei hinzufügen makieren Java Basics - Anfänger-Themen 1
T Text-Ausgabe für Textadventure - Organisation Java Basics - Anfänger-Themen 5
G Anklickbaren Text erzeugen Java Basics - Anfänger-Themen 2
B Text-Datei nur in Stream speichern und dann ausgeben Java Basics - Anfänger-Themen 3
M Java: BufferedReader liest nur die Hälfte der Text-Datei. Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben