14.6. Wrapping a String Hash for Ease of Use

Problem

You need to create a class to protect other developers on your team from having to deal with the details of how to add a hash to a string, as well as how to use the hash to verify if the string has been modified or corrupted.

Solution

The following classes decorate the StringWriter and StringReader classes to handle a hash added to its contained string. The WriterDecorator and StringWriterHash classes allow the StringWriter class to be decorated with extra functionality to add a hash value to the StringWriter’s internal string. Note that the method calls to create the hash value in the CreateStringHash method was defined in Recipe 14.5:

The code for the WriterDecorator abstract base class is:

using System;
using System.Text;
using System.IO;

[Serializable]
public abstract class WriterDecorator : TextWriter
{
    public WriterDecorator( ) {}

    public WriterDecorator(StringWriter stringWriter)
    {
        internalStringWriter = stringWriter;
    }

    protected bool isHashed = false;
    protected StringWriter internalStringWriter = null;

    public void SetWriter(StringWriter stringWriter)
    {
        internalStringWriter = stringWriter;
    }
}

This is the concrete implementation of the WriterDecorator class:

[Serializable] public class StringWriterHash : WriterDecorator { public StringWriterHash( ) : base( ) {} public StringWriterHash(StringWriter stringWriter) : base(stringWriter) { } public override Encoding Encoding { get {return (internalStringWriter.Encoding);} } public ...

Get C# Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.