C # - Сериализация / десериализация зашифрованного файла DES из потока

StackOverflow https://stackoverflow.com/questions/965042

Вопрос

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

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

Редактировать:Извините, забыл упомянуть, что мне нужен пример использования XmlSerializer.Сериализовать / десериализовать.

Это было полезно?

Решение

Шифрование

public static void EncryptAndSerialize(string filename, MyObject obj, SymmetricAlgorithm key)
{
    using(FileStream fs = File.Open(filename, FileMode.Create))
    {
        using(CryptoStream cs = new CryptoStream(fs, key.CreateEncryptor(), CryptoStreamMode.Write))
        {
            XmlSerializer xmlser = new XmlSerializer(typeof(MyObject));
            xmlser.Serialize(cs, obj); 
        }
    }
}

Расшифровка:

public static MyObject DecryptAndDeserialize(string filename, SymmetricAlgorithm key)    
{
    using(FileStream fs = File.Open(filename, FileMode.Open))
    {
        using(CryptoStream cs = new CryptoStream(fs, key.CreateDecryptor(), CryptoStreamMode.Read))
        {
            XmlSerializer xmlser = new XmlSerializer(typeof(MyObject));
            return (MyObject) xmlser.Deserialize(cs);
        }
    }
}

Использование:

DESCryptoServiceProvider key = new DESCryptoServiceProvider();
MyObject obj = new MyObject();
EncryptAndSerialize("testfile.xml", obj, key);
MyObject deobj = DecryptAndDeserialize("testfile.xml", key);

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

Другие советы

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

public static void EncryptAndSerialize<T>(string filename, T obj, string encryptionKey) {
  var key = new DESCryptoServiceProvider();
  var e = key.CreateEncryptor(Encoding.ASCII.GetBytes("64bitPas"), Encoding.ASCII.GetBytes(encryptionKey));
  using (var fs = File.Open(filename, FileMode.Create))
  using (var cs = new CryptoStream(fs, e, CryptoStreamMode.Write))
      (new XmlSerializer(typeof (T))).Serialize(cs, obj);
}

public static T DecryptAndDeserialize<T>(string filename, string encryptionKey) {
  var key = new DESCryptoServiceProvider();
  var d = key.CreateDecryptor(Encoding.ASCII.GetBytes("64bitPas"), Encoding.ASCII.GetBytes(encryptionKey));
  using (var fs = File.Open(filename, FileMode.Open))
  using (var cs = new CryptoStream(fs, d, CryptoStreamMode.Read))
      return (T) (new XmlSerializer(typeof (T))).Deserialize(cs);
}

Вот один из примеров of DES шифрование / расшифровка для строки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top