简体   繁体   中英

Write XML in Base64 encoding

Following my questions about storing data, it has been suggested that I could use XML but then obfuscate the file by encoding it using Base64. I like this idea, and I have achieved what I want in XML, but I don't know how to save it in Base64. This is my code so far:

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

Write it:

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

Read it:

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

You need to convert your xmlwriter to string like this

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


   }
  return sw.ToString();
}

then convert your string to Base64. and write it to file

This will have the information that you are looking for:

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

HTH,

d3

Here is an example using a MemoryStream

Save the XML data using MemoryStream to base64 encode the data and write it to a file.

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

Read the file back

// 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
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM