Сохранить данные в C ++ в файл, к которому пользователь не может получить доступ? - PullRequest
1 голос
/ 05 января 2012

Я пытаюсь создать элементарный вход в систему, создать систему учетных записей в C ++, в которой в основном пользователю предлагается ввести имя пользователя и пароль или создать новую учетную запись. В опции для создания новой учетной записи пользователь вводит некоторые данные, которые сохраняются в файле, однако я не хочу, чтобы эти данные были редактируемыми. Есть ли способ сделать эти данные недоступными? Моя операционная система Windows.

Ответы [ 5 ]

2 голосов
/ 05 января 2012

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

См http://msdn.microsoft.com/en-us/library/windows/desktop/aa365535(v=vs.85).aspx для установки скрытого атрибута.

1 голос
/ 05 января 2012

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

См. Альтернативные потоки данных

Вы можете использовать это вместе с любыми другими предложениями.

1 голос
/ 05 января 2012

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

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

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

1 голос
/ 05 января 2012

Использовать алгоритм двустороннего шифрования, например AES.Затем, как говорит @Casey, запишите его в двоичный файл.

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

В противном случае вы могли бы иметь облачное хранилище ключей и извлекать данные оттуда.

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

Редактировать: При перечитывании поста, если ваши секретные данные требуются для аутентификации, тогда вам действительно нужен теневой файл.Системы Unix поддерживают /etc/shadow, который содержит хэш MD5 (односторонний хэш) пароля.Таким образом, когда пользователь в следующий раз вводит пароль, вы просто проверяете, соответствует ли хеш нового пароля сохраненному хешу.Преимущество этого метода в том, что никто никогда не сможет прочитать действительный пароль.

1 голос
/ 05 января 2012

Самым простым, но не очень безопасным советом является запись в двоичный файл.

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

...