ERLEDIGT
JA
JA
ANTWORTEN
7
7
ZUGRIFFE
13065
13065
EMPFEHLEN
-
26.04.07 17:34 #1
- Registriert seit
- Feb 2007
- Ort
- Braunschweig (Niedersachsen)
- Beiträge
- 50
Hallo Javaprofies!
Ich arbeite zur Zeit an einem Program zum versenden von Dateien via Sockets.
Allerdings will ich diese Dateinen verschlüsseln, was ich mit einer Hybrid-Verschlüsselung realisiert habe.
D.h. ich verschlüssele die Datei sinkron mit einem 256Bit Aes-Key und
diesen Key wrappe ich anschließend mit einem 2048 Bit RSA-Pub-Key.
Dies erstmal zur Erläuterung.
Nun zu meinem eigentlichen Problem.
Der Aes-Key wird in Abhaengigkeit von einem Passwort generiert.
Und dort hakt mein Programm.
Wer diese Passwort hat, ist in der Lage das File zu entschlüsseln.
Wie gelingt es mir einen sicheren AES-Schluessel zu erzeugen, der nicht von einem Passwort abhaengig ist?
Und ab diesem Moment bitte ich euch um Hilfe. Ich möchte einen möglichst wiederstandsfähigen Aes-Key generieren.
Ich habe schon einem Menge Foren durchsucht und habe aber nie etwas wirklich zufriedenstellendes gefunde.
Jetzt schon einmal vielen Dank für eure Mühe!
Gruß Gora
-
26.04.07 20:13 #2MeinerEiner_80 Tutorials.de Gastzugang
Moin!
Ich frage mich gerade, wie du diesen AES Schlüssel erzeugst, genauer gesagt warum du denn ein Passwort benutzt, wenn es dir so unsicher erscheint?
Wenn ich mir die Spezifikation nämlich so ansehe, benötigst du zur Erstellung eines AES Secret Keys nur ein Byte Array.. Erstell dir doch einfach ein zufälliges Byte Array?! (Random.nextBytes())
*grüssle*
MeinerEiner
-
Hallo,
da du hybrid-verschlüsselung benutzt, brauchst du eigentlich gar kein passwort, sondern könntest den AES-Schlüssel von Java generieren lassen.
Code java:1 2 3 4
KeyGenerator keygen=KeyGenerator.getInstance("AES"); keygen.init(256); Key key = keygen.generateKey()
MFG
zEriX
-
26.04.07 22:11 #4
- Registriert seit
- Feb 2007
- Ort
- Braunschweig (Niedersachsen)
- Beiträge
- 50
Vielen Dank erstmal für eure Hilfe.
Im Moment sieht die Funktion die benutze so aus:
Code :1 2 3 4 5 6 7 8 9 10 11
public void AES_Key(String password) throws Exception { BASE64Decoder b64 = new BASE64Decoder(); byte [] cipherText = b64.decodeBuffer(password); MessageDigest messagedigest = MessageDigest.getInstance("MD5"); messagedigest.reset(); messagedigest.update(cipherText); Arrays.fill(cipherText, (byte)0); this.key = new SecretKeySpec(messagedigest.digest(), "AES"); }
(sorry für diesen miesen CodeStyle ... ich bin gerade in der Phase des Dirty-coding
)
Aber nochmals Danke
Ich werde mich da morgen nochmal dransetzen und das Ganze ausprobieren.
In diesem sinne Euch noch einen schoenen Abend.
Macht's gUUt.
Bis Morgen
Gruß Gora
-
27.04.07 16:00 #5
- Registriert seit
- Jun 2005
- Beiträge
- 117
Wenn du einen 100% sicheren Schlüssel generieren möchtest, dann bleibt dir nur der Umweg über eine physikalische Größe, wie etwa radioaktiver Zerfall oder atmosphärisches Rauschen. Damit erstellt du dir ein wirkliches zufälliges Bitarray auf dessen Grundlage du dir deinen Schlüssel erstellen kannst. Zwar liefern auch alle Programme Zufallszahlen, die sind aber deterministisch - also Pseudozufallszahlen die unter gleichen Startbedingungen immer wieder erzeugt werden.
-
Hallo,
ich setze bedingt durch Vorgaben im Team das jdk1.5.0_07 ein.
wenn ich dieses Beispiel ausbaue zu
ist das Ergebnis eine Exception Illegal key size or default parameters in der Zeile cipher.init(Cipher.ENCRYPT_MODE, secretKey).Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
String data = "This is a test 4 crypting and decrypting. Please contact administrator for help if any error happens."; try { KeyGenerator keygen = KeyGenerator.getInstance("AES"); keygen.init(256);//,random); Key secretKey = keygen.generateKey(); Cipher cipher = Cipher.getInstance("AES"); byte[] encrypted = data.getBytes("UTF8"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] encryptBytes = cipher.doFinal(encrypted); String encryptString = new String(encryptBytes); cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, secretKey); byte[] decryptBytes = cipher.doFinal(encryptBytes); String decryptString = new String(decryptBytes); System.out.println("Encrypt String : (" + encryptString + ")"); System.out.println("Original String : (" + data + ")"); System.out.println("Decrypt String : (" + decryptString + ")"); } catch(Exception e) { e.printStackTrace(); }

Der Witz ist - mit keygen.init(128) klappt alles wunderbar.
Was kann ich bitte tun. Ich bin mit meinem Anfängerwissen am Ende und brauche DRINGENST Hilfe!
Gruß und Dank
Kai
-
Hallo,
schau mal hier.
https://wiki.imise.uni-leipzig.de/Themen/JavaSecurity
MFG
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
Hallo,
danke für die Info, aber das problem scheint woanders zu liegen. ein tipp aus einem anderen Forum war: Ma muss Full Encryption Support einschalten. (Policy Files)
http://java.sun.com/javase/technologies/security/
Alledings habe ich nun noch folgendes Problem: Wenn ich die Zeile
byte[] decryptBytes = cipher.doFinal(encryptBytes);
in
byte[] decryptBytes = cipher.doFinal(encryptString.getBytes());
ändere, d.h. nicht mehr die encrypteten Bytes verwende, sondern über einen String gehe, was ich muss, da eine DB dazwischen ist, bekomme ich leider folgendes Ergebnis:
Encrypt String : (à÷PMÃBH©ý wâá’‰âMŸ×ÞleSÐÖ‡+èÊ0ði„<¦ÐIÆæ»[ÑZß1‡ª4JPÄJ?Ñ®©‘¿‡µ<P V¾×|&wzÁm€A^Ö¤é—1eÿðPų¡5ÓdÔ(쀴ëÑú}ȇ)
Original String : (This is a test 4 crypting and decrypting. Please contact administrator for help if any error happens.)
Decrypt String : (This is a test 4•¾À
Ó”aVT¢²¸Äcrypting. Please¡?<²S%ÖKZ‡º÷vtrator for help if any error happens.)
Also ist hier bei mir noch was falsch. Habt Du da eine Idee?
Gruß Kai
Ähnliche Themen
-
MYSQL Verschluesselung anstelle von .htaccess
Von exitboy im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 02.10.07, 09:41 -
Verschluesselung anhand eines Passwortes
Von Unicate im Forum C/C++Antworten: 2Letzter Beitrag: 24.04.06, 18:53





Zitieren


Login





