Hirdetés

Keresés

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

  • tick

    aktív tag

    válasz axioma #7577 üzenetére

    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());

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