Как зашифровать текстовый файл с помощью C? - PullRequest
5 голосов
/ 01 августа 2010

Я хочу иметь такую ​​программу:

scanf("%s", name);
scanf("%s", id);
scanf("%d", &age);

Теперь я хочу записать name, id и age в файл, но файл должен быть зашифрован, чтобы только моя программа могла считывать записанные данные.

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

Если библиотека шифрования является решением, какая из них лучше всего подходит для простого шифрования текстовых файлов?

Ответы [ 5 ]

7 голосов
/ 01 августа 2010

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

Если вы можете использовать C ++, я предлагаю Crypto ++ Вы не можете использовать C ++, тогда я предлагаю вам реализовать библиотеку C-оболочки для Crypto ++ .Другая возможность - libcrypto , хотя в ней отсутствует поддержка AES.

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

3 голосов
/ 01 августа 2010

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

Если ваши приложения критичны, вам следует использовать библиотеки, с которыми вы связаны.

2 голосов
/ 01 августа 2010

Вам нужно надежное шифрование?Имеют ли люди, от которых вы защищаете файл, доступ к исполняемому файлу и умеют ли его разбирать и анализировать?У них есть криптоаналитические навыки?Если нет, вы можете использовать очень простой шифр на основе XOR.

  1. Используйте программу для генерации длинной случайной строки символов, например, "837es238aj983", но длиннее любой строки, которую вы можете прочитать из ввода (он не должен быть читабельным).
  2. Создать случайное целое число.
  3. Сохранить случайную строку и целое число как глобальные переменные в вашей C-программе.
  4. XOR для каждого возрастапрочитайте случайное целое число и сохраните значение XORed в файл.
  5. XOR каждый символ в строках, которые вы читаете из ввода, с символом с тем же индексом в вашей случайной строке.Сохраните значение XORed в файл.
  6. Когда вы читаете значения из файла, вы снова делаете XOR со своими случайными ключами и получаете исходные значения.
0 голосов
/ 02 января 2013

Если вы используете Windows, рассмотрите возможность использования API-интерфейсов шифрования Windows, доступных как на C, так и на C ++:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa382358(v=vs.85).aspx

0 голосов
/ 01 августа 2010

Для простого текстового файла, который вы читаете / пишете за один раз, я бы использовал потоковый шифр, например RC4.

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

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