Использование CipherOutputStream + AES для записи строки в файл

Я ищу способ, используя пароль любого размера, зашифровать файл, который я получаю через поток с AES. Чтобы упростить начало, я пытался просто записать какое-то зашифрованное сообщение в файл. Но у меня возникли проблемы:

  1. Я хотел бы иметь возможность определить пароль любого размера. Можно ли это сделать в "стандартном" виде или мне придется дополнять пароли до размера 2^k? В настоящее время я обхожу проблему, предоставляя временный пароль «aaaaaaaaaaaaaaaaa», но я хотел бы избавиться от него как можно скорее.
  2. Если я попытаюсь записать длинную строку в cos, в файл будет записано что-то зашифрованное. Но если я попробую что-то меньшее, как "abc", ничего не будет написано. Я играл с несколькими вариантами заполнения, но они кажутся бесполезными (PKCS5Padding, SSL3Padding, NoPadding ).

Вот код, который я использую:

    SecretKeySpec localSecretKeySpec = new SecretKeySpec("aaaaaaaaaaaaaaaa".getBytes(), "AES");
    Cipher localCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    localCipher.init(Cipher.ENCRYPT_MODE, localSecretKeySpec);

    CipherOutputStream cos = new CipherOutputStream(new FileOutputStream("abc"), localCipher);
    IOUtils.write("abc", cos);
    cos.flush();
0
задан devoured elysium 26 April 2012 в 20:49
поделиться