Зашифровать / расшифровать текстовый файл в Delphi? - PullRequest
9 голосов
/ 06 мая 2010

Привет, я хотел бы знать лучшую технику шифрования для шифрования и шифрования текстовых файлов.

Мой сценарий:

У меня есть программное обеспечение, имеющее два типа пользователей: Администратор и Операторы. Наше требование заключается в шифровании текстового файла, когда администратор вводит данные с помощью графического интерфейса пользователя и сохраняет их. Этот зашифрованный файл будет введен для Оператора, и им просто нужно выбрать его и использовать этот файл. Здесь файл должен автоматически расшифровывать данные для дальнейшего расчета, когда оператор выбирает эти файлы.

Пожалуйста, помогите мне, какую технику шифрования / дешифрования я должен использовать?

Ответы [ 3 ]

19 голосов
/ 06 мая 2010

Золотое правило при выполнении криптографии - понимать, что криптография в целом очень сложна.

Существует множество различных подходов / алгоритмов, и ни один алгоритм / метод не может считаться лучшим. Все зависит от ваших потребностей и возможностей повлиять на распространение приложений и т. Д.

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

Хорошее место, чтобы начать читать о крипто, это http://en.wikipedia.org/wiki/Cryptography.

Что касается готовых вещей для Delphi, есть несколько хороших пакетов:

Страницы Torry также имеют длинный список компонентов:

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

3 голосов
/ 06 мая 2010

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

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

Возможно также создание собственного алгоритма асимметричного ключа, если вы настоящий Math Wizard. Расчеты сложны и включают в себя чрезвычайно высокие простые числа в большинстве решений. Как сказал К. Санделл, найдите хорошее существующее решение, которое наилучшим образом соответствует вашим потребностям.

3 голосов
/ 06 мая 2010

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

Когда я вижу ваш сценарий, кажется, что он встроен в ваши приложения. Если это так, не забывайте использовать разные приемы, чтобы скрыть это: строки пароля должны быть разделены на несколько битов и добавлены только в защищенное пространство памяти, которое должно быть помечено как нестраничное (в противном случае пароль можно увидеть в файле страницы). 1003 * Те же правила для контента, который не зашифрован (текстовый файл). Лучше всего, чтобы он никогда не сохранялся (даже временно) в незашифрованном виде на диск. Если оно сохранено, то перед использованием перезаписать дату мусором перед его удалением.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...