Загрузите и зашифруйте любой файл из Google App Engine - PullRequest
0 голосов
/ 08 марта 2012

Я делаю небольшой проект для колледжа в GAE (с использованием Java), в котором я реализую форму «службы обмена сообщениями», где, когда пользователь отправляет сообщение другому пользователю, сообщение шифруется 128-битным AES с использованием Java криптографические библиотеки, а затем хранятся на сервере. Полученный ключ затем должен быть введен получателем, чтобы иметь возможность прочитать сообщение.

Теперь я хочу включить возможность загрузки файлов (вложения) в этом. Таким образом, когда пользователь присоединяет файл (который может быть ANY file, jpg, gif, txt, pdf, doc, exe и т. Д.), Он сначала шифруется, а затем сохраняется. Я хочу интерпретировать любой файл как текстовый файл (последовательность символов), чтобы шифрование / дешифрование можно было выполнять с помощью существующего кода. (Имеет ли это смысл? Я думаю об этом, потому что вы можете открыть любой файл в блокноте и просмотреть файл как последовательность символов). Я хотел бы сохранить ограничение на размер вложения, например, 5-10 Мб, но если по какой-то причине это можно сделать только для еще меньших размеров (<1 Мб), даже тогда это нормально для меня. </p>

Таким образом, если пользователь присоединяет файл, например, abc.exe, я интерпретирую его как текстовый файл abc.txt и шифрую его вместе с сообщением. Затем, когда получатель вводит правильный ключ, я расшифровываю сообщение и файл abc.txt, но выполняю роль abc.exe. (Я могу попросить пользователя сначала преобразовать любой файл в .txt, но это будет неудобно)

Можно ли это сделать? И я новичок в веб-разработке, сервлетах и ​​GAE (мой первый проект с использованием любого из них), поэтому, пожалуйста, потерпите меня.

Спасибо !!

1 Ответ

1 голос
/ 08 марта 2012

Ну, простой ответ - да, это можно сделать. Обычная операция - прочитать файл как двоичный файл, зашифровать данные, а затем кодировать их с помощью base 64. Затем база 64 принимающей стороны декодирует ее, расшифровывает и, вероятно, записывает данные. Base 64 будет увеличивать объем данных, используя 4 символа на каждые 3 байта (+ может быть один или два байта заполнения в конце).

Если вам нужна дополнительная информация, такая как имя файла, вам нужно создать какой-то контейнер для данных и зашифровать его. Одним из решений является использование ASN.1, хотя он имеет относительно большую кривую обучения.

Чтобы посмотреть пример этого, взгляните на спецификации SMIME и CMS (синтаксис криптографических сообщений), который определяет почту с зашифрованными вложениями. CMS широко используется. CMS доступна в пакете bcmail (или более поздней версии) Bouncy Castle.

Обратите внимание, что вам нужна какая-то защита аутентификации / целостности, если вы создаете сетевой протокол с шифрованием. Также может потребоваться хорошая инфраструктура PKI. Это довольно большой проект.

...