devonJones Ответов: 2

Блокировка текстового файла, возможно ли это? Нужно ли его шифровать? C# .NET


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

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

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

Что я уже пробовал:

Я пытался посмотреть на msdn, если там были какие-то ответы, но ничего не смог найти.

Richard MacCutchan

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

2 Ответов

Рейтинг:
1

Bernhard Hiller

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


devonJones

Мне нравится способ сжатия, я никогда не делал этого раньше, но сжать его в zip-файл и поставить пароль на zipfile было бы неплохо, но так как я постоянно получаю доступ к файлу из приложения, я действительно не знаю, будет ли это работать

Рейтинг:
0

Foothill

Другой возможный путь - использовать шифрование AES (msdn link: Класс AES)

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

Этот пример включает в себя функцию расширения byte[].GetSubArray(int, int).

public byte[] Encrypt(string passphrase, string text)
{
  byte[] hashedPassphrase;

  // hash the passphrase
  using (HashAlgorithm hash = SHA512.Create())
  {
    hashedPassphrase = hash.ComputeHash(Encoding.UTF8.GetBytes(passphrase));
  }

  using (Aes crypto = Aes.Create())
  {
    // use the passphrase hash to set the initialization vector and crypto key
    crypto.IV = hashedPassphrase.GetSubArray(0, 16);
    crypto.Key = hashedPassphrase.GetSubArray(16, 32);

    // encrypt your data
    using (ICryptoTransform encryptor = crypto.CreateEncryptor(crypto.Key, crypto.IV))
    {
      MemoryStream memStream = new MemoryStream();
      using (CryptoStream encStream = new CryptoStream(memStream, encryptor, CryptoStreamMode.Write))
      {
        encStream.Write(Encoding.UTF8.GetBytes(text), 0, text.Length);
        encStream.FlushFinalBlock();
        return memStream.ToArray();
      }
    }
  }
}

Расшифровка-это почти тот же код, за исключением криптографии.CreateEncryptor () становится криптографией.CreateDecryptor
и
фактический код расшифровки немного отличается.
string plainText;

MemoryStream memStream = new MemoryStream(encryptedPassword);
CryptoStream decStream = new CryptoStream(memStream, decryptor, CryptoStreamMode.Read);

using (StreamReader reader = new StreamReader(decStream))
{
  plainText = reader.ReadToEnd();
}