[Mono-dev] Type.GUID patch

Sebastien Pouliot sebastien.pouliot at gmail.com
Sat Sep 3 13:09:30 EDT 2005

Hello Robert,

On Sat, 2005-03-09 at 17:00 +0200, Robert Jordan wrote:
> The hash appears to change with the assembly name and type name.
> Renaming gt.cs will return another GUID as well as renaming
> "App". Renaming gt.exe doesn't change the GUID.
> Applying an AssemblyVersionAttribute will change the GUID,
> so I'm pretty sure, that Type.AssemblyQualifiedName is taken
> into account while generating the hash.
> The following algorithm computes the GUID from
> Type.AssemblyQualifiedName using a MD5 hash: 
> Guid ComputeGuid (Type t)
> {
>      byte[] bytes = System.Text.Encoding.UTF8.
>          GetBytes (t.AssemblyQualifiedName);
>      using (System.Security.Cryptography.MD5 md5 =
>             System.Security.Cryptography.MD5.Create ()) {
>          return new Guid (md5.ComputeHash (bytes));
>      }
> }
> Is it a patch worth?

I guess it depends on how it's gonna be used. This isn't the first time
people talks about Type.Guid but I never seen any talk about _using_
it ;-) at least not with Mono.

MD5 will give you a 128 bits digest value, which match the required Guid
length, and recent problems related to MD5 are pretty much irrelevant to
such usage. So it's probably (if everything is included in the qualified
name) a correct implementation - functionality-wise.

But creating a using MD5 is kind of heavyweight - even more if a new
instance is created each time. So anyone using this heavily will notice
a big performance problem.
Sebastien Pouliot
email: sebastien at ximian.com
blog: http://pages.infinit.net/ctech/

More information about the Mono-devel-list mailing list