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));
}
Ответы
Ответ 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[]
. Я знаю, что это говорит, что не высказывайте свое мнение, но его строго мнение, это была единственная часть вашего вопроса, оставшаяся без ответа предыдущими двумя.