Hirdetés

Új hozzászólás Aktív témák

  • axioma
    veterán

    AES128 bit kulcsot szeretnék generálni String input alapján. A String hossza bármi lehet. A függvény a következőt csinálná:
    -Ha a String 16 karakter akkor nincs teendő
    -Ha több mint 16 karakter akkor ArrayUtils.subArray(key.toCharArray(), 0, 16) majd ezt a végén vissza String-gé
    -Ha kevesebb mint 16 karakter (N hosszú), akkor key.toCharArray(), egy új CharArray-be N-ig a key értékei, azon felül pedig egy karakter. A példában "c".

    Így minden esetben 16 karakter hosszú kulcsot kapok. Ez működik is (String.valueOf-fal). Viszont nem 128 bit lesz a végeredmény.

    16 vagy több karakterrel működik hibátlanul. A probléma akkor keletkezik ha ki kell egészíteni plusz karakterekkel: Invalid AES key length: 28 bytes
    Jelenleg sysout esetén nem is a key-t kapom meg, hanem a referenciáját.

    String pin = "1234";
    ...
    ...
    // így fut le ha 16-nál rövidebb a pin
    String[] keyArr = new String[16];
    pinArr = pin.toCharArray();
    for(int i=0;i<pin.length();i++) {
    keyArr[i] = String.valueOf(pinArr[i]);
    }
    for(int i = pin.length();i<16;i++) {
    keyArr[i] = "c";
    }
    key = String.valueOf(keyArr);
    System.out.println(key); // String helyett reference

    Key aesKey = new SecretKeySpec(key.getBytes(), "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.ENCRYPT_MODE, aesKey); // java.security.InvalidKeyException: Invalid AES key length: 28 bytes
    byte[] encrypted = cipher.doFinal(password.getBytes());

    1. Elvi szinten nagyon nem ertek egyet az ilyen modon torteno AES kulcs megadassal (gyakorlatilag 256^16 helyett kb. 80^16 kulcsot "engedsz meg" - klavirol elerheto kis/nagy betuk, szmaok, gyakoribb jelek), ezzel kapasbol mar matematikailag is tobb mint 8 nagysagrenddel csokkented a lehetosegeket... de ha az emberek jelszoadasi szokasait nezzuk, kb. beepited a rendszerbe a betoresi pontot a human tenyezovel).
    2. Mi az oka annak, hogy a char array-t string tombbe masolva akarod kiegesziteni? Nem latom a koncepciot.
    Sot azt sem igazan, hogy minek jon be a char array... te egy 16 hosszu stringet akarsz, akkor ha nagyobb, akkor subString, ha kisebb, akkor meg mondjuk (ha nagyon egyszeru/fapados kodot szeretnel) ciklusban hozzaadsz amig nem jo a hossz egy "c"-t.
    Vagy me'g egyszerubb ha mindkettot egy lepesben intezed el... azaz a bejovo stringhez alapbol hozzaadod azt a fix stringet, amiben 16 db 'c' van, es veszed a subString-gel az elso 16 karaktert. Ez mindharom esetre egyetlen utasitassal visszaadja az altalad va'gyott tipusu kiegeszitest.

    szerk. kellett nekem ennyit gepelni :)

Új hozzászólás Aktív témák