O'Reilly logo

C# Cookbook by Jay Hilyard, Stephen Teilhet

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required