tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
13065
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    gora gora ist offline Mitglied Silber
    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
     

  2. #2
    MeinerEiner_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
     

  3. #3
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    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
     

  4. #4
    gora gora ist offline Mitglied Silber
    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
     

  5. #5
    normaler_spinner normaler_spinner ist offline Mitglied Gold
    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.
     

  6. #6
    Avatar von BlackMizi
    BlackMizi BlackMizi ist offline Grünschnabel
    Registriert seit
    Jul 2004
    Ort
    Simmelsdorf
    Beiträge
    3
    Hallo,

    ich setze bedingt durch Vorgaben im Team das jdk1.5.0_07 ein.
    Zitat Zitat von Sascha Schirra Beitrag anzeigen
    Code java:
    1
    2
    3
    
    KeyGenerator keygen=KeyGenerator.getInstance("AES");
    keygen.init(256);
    Key key = keygen.generateKey()
    wenn ich dieses Beispiel ausbaue zu
    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();
    }
    ist das Ergebnis eine Exception Illegal key size or default parameters in der Zeile cipher.init(Cipher.ENCRYPT_MODE, secretKey).

    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
     

  7. #7
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Hallo,

    schau mal hier.
    https://wiki.imise.uni-leipzig.de/Themen/JavaSecurity

    MFG

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  8. #8
    Avatar von BlackMizi
    BlackMizi BlackMizi ist offline Grünschnabel
    Registriert seit
    Jul 2004
    Ort
    Simmelsdorf
    Beiträge
    3
    Hallo,
    Zitat Zitat von Sascha Schirra Beitrag anzeigen
    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

  1. MYSQL Verschluesselung anstelle von .htaccess
    Von exitboy im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 02.10.07, 09:41
  2. Verschluesselung anhand eines Passwortes
    Von Unicate im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 24.04.06, 18:53