Подтвердить что ты не робот

Java: Как написать двоичные файлы?

Я занимаюсь веб-программированием уже несколько лет, и с тех пор я не занимался программированием для настольных приложений, и я забыл так много вещей. Пожалуйста, будьте терпеливы, если это слишком просто.

Теперь у меня такая ситуация:
Я пытаюсь сохранить некоторые хешированные слова в файле. Я думаю, я должен использовать для этого двоичные файлы (пожалуйста, поправьте меня, если я ошибаюсь). Но я понятия не имею, как написать слова в файл. Я пробовал много способов, но когда я читаю файл и пытаюсь расшифровать слова, я получаю BadPaddingException.

Кто-нибудь знает, как записать слова в файл?

P.S: Я использую этот код для шифрования/дешифрования слов (я получил его из другого потока StackOverflow с несколькими изменениями):

public static byte[] encrypt(String property) throws GeneralSecurityException, UnsupportedEncodingException {
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
        SecretKey key = keyFactory.generateSecret(new PBEKeySpec(password));
        Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
        pbeCipher.init(Cipher.ENCRYPT_MODE, key, new PBEParameterSpec(salt, 20));
        return pbeCipher.doFinal(property.getBytes("UTF-8"));
    }

    public static String decrypt(byte[] property) throws GeneralSecurityException, IOException {
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
        SecretKey key = keyFactory.generateSecret(new PBEKeySpec(password));
        Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
        pbeCipher.init(Cipher.DECRYPT_MODE, key, new PBEParameterSpec(salt, 20));
        return new String(pbeCipher.doFinal(property));
    }
4b9b3361

Ответ 1

Ну, просто используйте FileInputStream и FileOutputStream =)

Пример записи:

// encrypted data in array
byte[] data = ...

FileOutputStream fos = ...
fos.write(data, 0, data.length);
fos.flush();
fos.close();

Пример чтения:

File inputFile = new File(filePath);
byte[] data = new byte[inputFile.length()];
FileInputStream fis = new FileInputStream(inputFile);
fis.read(data, 0, data.length);
fis.close();

Вышеприведенный код предполагает, что один файл содержит один зашифрованный элемент. Если вам нужно сохранить более одного элемента в одном файле, вам нужно будет разработать для него некоторую схему формата. Например, вы можете сохранить количество байтов в зашифрованных данных как 2 байта, до самих данных. 2 байта на элемент означает, что зашифрованный элемент не может быть длиннее 2 × 16 байт. Конечно, вы можете использовать 4 байта для длины.

Ответ 2

Сохранение как текстовый документ, по-видимому, имеет больше смысла для меня, данные уже есть, поэтому нет необходимости преобразовывать его в byte[], и если вам нужно читать из файла, было бы очень удобно. Если вы не сохраните его из Интернета и его уже пропустили через сокет как byte[]. Я знаю, что это говорит, что не высказывайте свое мнение, но его строго мнение, это была единственная часть вашего вопроса, оставшаяся без ответа предыдущими двумя.