Сериализация объекта в XML и хэширование результата - PullRequest
4 голосов
/ 30 августа 2011

Я пытался сериализовать объект в xml и затем хэшировать результат, но всякий раз, когда я создаю хэш, он всегда одинаков для разных объектов, чтобы не знать, что я делаю неправильно или не учел.Буду признателен за помощь.

Вот код, который я использую:

private static byte[] CreateHash<T>(T value)
{
    using (MemoryStream stream = new MemoryStream())
    using (SHA512Managed hash = new SHA512Managed())
    {
        XmlSerializer serialize = new XmlSerializer(typeof(T));

        serialize.Serialize(stream, value);
        return hash.ComputeHash(stream);
    }            
}

Ответы [ 2 ]

8 голосов
/ 30 августа 2011

Перемотка потока:

serialize.Serialize(stream, value);
stream.Position = 0;
return hash.ComputeHash(stream);

После Serialize поток находится на конце , данные недоступны для чтения.

1 голос
/ 30 августа 2011

Поскольку хэш-код ничего не всегда будет одним и тем же хешем, первоначальной идеей было бы установить позицию потока обратно в первый байт после записи в него:

stream.Position = 0;
...