5 votes

Écrire le XML en encodage Base64

Suite à mes questions sur le stockage des données, il m'a été suggéré d'utiliser le XML, mais d'obscurcir le fichier en l'encodant en Base64. J'aime cette idée, et j'ai obtenu ce que je voulais en XML, mais je ne sais pas comment l'enregistrer en Base64. Voici mon code jusqu'à présent :

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;

XmlWriter write = XmlWriter.Create("C:\\Users\\Andy\\Desktop\\database.xml", settings);
write.WriteStartDocument();
write.WriteStartElement("Database");
write.WriteStartElement("Entry");
write.WriteAttributeString("key", "value");
write.WriteEndElement();
write.WriteEndElement();

write.Flush();
write.Close();

5voto

giammin Points 5027

Ecris-le :

var sb = new StringBuilder(); 
var settings = new XmlWriterSettings();
//..settings
using (var writer = XmlWriter.Create(sb, settings))
{
    //...
}
//http://stackoverflow.com/questions/1564718/using-stringwriter-for-xml-serialization
var encoding = new UnicodeEncoding(); 
string s = Convert.ToBase64String(encoding.GetBytes(sb.ToString()));

File.WriteAllText("c:\temp.txt", s);

Lisez-le :

string readText = File.ReadAllText("c:\temp.txt");
byte[] toDecodeByte = Convert.FromBase64String(readText);

using (var stream = new MemoryStream(toDecodeByte))
{
    using (XmlReader reader = XmlReader.Create(stream))
    {
        //.. read your xml
    }
}

3voto

Ehsan Points 14327

Vous devez convertir votre xmlwriter en chaîne de caractères comme ceci

 using (var sw = new StringWriter()) {
 using (var xw = XmlWriter.Create(sw)) {
// Build Xml with xw.

   }
  return sw.ToString();
}

puis convertir votre chaîne en Base64. et l'écrire dans le fichier

1voto

d347hm4n Points 634

Vous y trouverez les informations que vous recherchez :

http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.writebase64.aspx

HTH,

d3

1voto

SwDevMan81 Points 22634

Voici un exemple utilisant un MemoryStream

Enregistrez les données XML en utilisant MemoryStream pour coder les données en base64 et les écrire dans un fichier.

using (var ms = new MemoryStream())
{   
    // Memory Stream
    using (XmlWriter writer = XmlWriter.Create(ms,settings)) 
    {
        writer.WriteStartDocument();
        writer.WriteStartElement("Database");
        writer.WriteStartElement("Entry");
        writer.WriteAttributeString("key", "value");
        writer.WriteEndElement();
        writer.WriteEndElement();

        writer.Flush();
        writer.Close();

        // XML Data (Debug)
        Console.WriteLine(new UTF8Encoding().GetString(ms.ToArray()));

        // Pre encoding hex (Debug)
        Console.WriteLine(BitConverter.ToString(ms.ToArray()));

        string s = Convert.ToBase64String(ms.ToArray());
        Console.WriteLine(s); // (Debug)

        // Post encoding
        File.WriteAllText(@"C:\Temp\A.enc", s);
    }
}

Lire le fichier en retour

// Read encoded file back to xml
string enc_text = File.ReadAllText(@"C:\Temp\A.enc");
Console.WriteLine(enc_text); // (Debug)

// Pre encoding hex
byte[] mem_bytes = Convert.FromBase64String(enc_text);
Console.WriteLine(BitConverter.ToString(mem_bytes)); // (Debug)

// XML Data
Console.WriteLine(new UTF8Encoding().GetString(mem_bytes));

// Read byte array into Reader
using (var stream = new MemoryStream(mem_bytes))
{
    using (XmlReader reader = XmlReader.Create(stream))
    {
        // Use reader as desired
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X