Как зашифровать / расшифровать файл в Java? - PullRequest
1 голос
/ 14 марта 2010

Я пишу Java-приложение, которое может «шифровать» и, следовательно, «дешифровать» любой двоичный файл.

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

Для чтения исходного файла я, вероятно, использовал бы класс java.io.FileInputStream, чтобы получить "массив байтов" byte originalBytes[] файла.

Тогда я, вероятно, использовал бы какой-нибудь очень простой шифр, например " сдвинуть каждый байт на 1 ", а затем я бы получил "зашифрованные" байты byte encryptedBytes[], и, скажем, я бы также «пароль» для него, например «123456789».

Затем, когда кто-то хочет «расшифровать» этот файл, он должен сначала ввести пароль («123456789»), а после этого файл может быть расшифрован (таким образом, « смещает каждый байт на 1 » ") и, следовательно, сохраняется в выходной файл через java.io.FileOutputStream.


Мне просто интересно, как «сохранить» информацию о пароле в зашифрованном файле, чтобы приложение расшифровки узнало, равны ли введенный пароль и «настоящий» пароль?

Возможно, было бы глупо добавлять пароль (например, порядковые номера ASCII букв пароля) в начало файла (перед зашифрованными данными).


Поэтому мой главный вопрос как сохранить информацию о пароле в зашифрованном файле ?

Ответы [ 6 ]

5 голосов
/ 14 марта 2010

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

4 голосов
/ 14 марта 2010

Может быть, эта библиотека с открытым исходным кодом может помочь вам:

http://www.jasypt.org/

2 голосов
/ 14 марта 2010

попробуйте образец, приведенный ниже. Вы можете преобразовать байты в строку, а затем зашифровать, а затем записать его в файл. переверните его во время расшифровки.

http://www.exampledepot.com/egs/javax.crypto/desstring.html

ниже вы можете найти образец DES Enc & Dec для файлов ..

http://www.exampledepot.com/egs/javax.crypto/DesFile.html

2 голосов
/ 14 марта 2010

Не храните его там! Любое хорошее шифрование основано на математических алгоритмах (например, AES). Возможно, вы захотите взглянуть на BouncyCastle http://www.bouncycastle.org/ - но шифрование - это не простая тема, поэтому вы должны получить хорошую книгу, чтобы сначала узнать о ее основах!

2 голосов
/ 14 марта 2010

Используйте пароль для шифрования ваших данных. Например, вы можете повторить пароль, чтобы он соответствовал длине байтового массива, а затем сделать что-то вроде

data[i] = data[i] >> password[i];

Редактировать: если вы хотите сохранить пароль, вам придется его зашифровать. Который - по крайней мере, при использовании симметричных криптосистем - по своей природе будет небезопасным.

1 голос
/ 14 марта 2010

Действительно простой способ использовать пароль для шифрования - это использовать XOR, вот некоторый псевдокод

for(byte in file)
{
    Byte newByte = byte ^ (byte) password[i];
    outputFile.write(newByte);
    i = (i + 1) password.length();
}

Это основано на том, что (x XOR y) XOR y = x, все, что вам нужно сделать, это зашифровать / расшифровать с тем же паролем.

...