Hello.

I have a class that is serializable. I would like to compute the MD5 of it.

I already had a function in the project to get a MD5 from a Stream, so I reused it, and created a function to convert an object to a memorystream.

The code is as follows. Does anyone see any problems, but more to the point, is there an easier way to do this that I'm simply missing?

Thanks in advance.

Code:
    Private Function GetMD5FromObject(ByVal obj As Object) As String
        Dim msObjectStream As MemoryStream = ObjectToMemoryStream(obj)
        Dim strHashFromObject As String = GetMD5FromStream(msObjectStream)
        msObjectStream.Close()
        Return strHashFromObject
    End Function


    Private Function GetMD5FromStream(ByVal mStream As System.IO.MemoryStream) As String
        Dim strHash As String
        Using md5 As New System.Security.Cryptography.MD5CryptoServiceProvider
            mStream.Position = 0
            ' hash contents of this stream
            Dim hash() As Byte = md5.ComputeHash(mStream)
            ' return formatted hash
            strHash = ByteArrayToString(hash)
        End Using
        Return strHash
    End Function


    Function ObjectToMemoryStream(ByVal obj As Object) As MemoryStream
        ' Create a memory stream and a formatter.
        Dim ms As New System.IO.MemoryStream(1000)
        Dim bf As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(Nothing, _
            New System.Runtime.Serialization.StreamingContext(System.Runtime.Serialization.StreamingContextStates.Clone))
        ' Serialize the object into the stream.
        bf.Serialize(ms, obj)
        ' Position streem pointer back to first byte.
        ms.Seek(0, SeekOrigin.Begin)
        ' Return the ms
        Return ms
    End Function