Pergunta

Alguém tem algum exemplo de como criptografar dados serializados para um arquivo e, em seguida, lê-lo de volta usando DES?

Eu escrevi algum código já que não está funcionando, mas eu prefiro ver uma nova tentativa em vez de perseguir o meu código.

Editar :. Desculpe, esqueci de mencionar que eu precisar de um exemplo usando XmlSerializer.Serialize / Deserialize

Foi útil?

Solução

Criptografia

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); 
        }
    }
}

A descriptografia:

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);
        }
    }
}

Uso:

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

Você precisa mudar MyObject para qualquer que seja o tipo do seu objeto é que você está a serialização, mas esta é a idéia geral. O truque é usar a mesma instância SymmetricAlgorithm para criptografar e descriptografar.

Outras dicas

Esta discussão deu a idéia básica. Aqui está uma versão que faz as funções genéricas, e também permite que você passe uma chave de criptografia por isso é reversível.

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);
}

Aqui está um exemplo de criptografia DES / decription para uma string.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top