The [Tcllib] '''[http://core.tcl.tk/tcllib/doc/trunk/embedded/www/tcllib/files/modules/md5/md5.html%|%md5]''' module creates [MD5] message digests . ** Documentation ** [http://tcllib.sourceforge.net/doc/md5.html%|%official reference] ([http://docs.activestate.com/activetcl/8.6/tcllib/md5/md5.html%|%alternate]) : [http://core.tcl.tk/tcllib/doc/trunk/embedded/www/tcllib/files/modules/md5/md5.html%|%official reference] , development version : ** Description ** The [tcllib] implementation of MD5 will defer to the md5 from the [Trf] package if that is available. [DKF] : The version in [Tcllib] is partially built on [MD5Pure] . ** Hexadecimal Representation ** [jmn] 2004-02-01 : Are there some gotchas the novice user should be aware of here? What happens when you use the binary value returned by `md5::md5` as part of a string, as in the following snippet taken from [Tuplespace] ====== proc tid {tuple} { return "\#Tuple[::md5::md5 $tuple]" } ====== See my comments about half way down that page. Basically it looks like `md5::md5` of the string `hello there test etc` returns a value that includes a carriage return. As I guess can be seen by the existence of `0D` when you look at the hex result: ====== % md5 -hex {hello there test etc} FC7EB2BA07710DECECC688BCEA5BB323 ====== I assume there may be other characters that may cause problems when using the binary result in a string - so presumably one should always use the -hex option for this sort of situation(?) When and how does one use the binary result then? [PT] : You have turned the binary result into the string representation of a binary result there. If you want a string then you should use ''-hex'' or in some other way arrange to protect the data. For instance, once a string function is used any embedded nil chars are going to terminate the data. The binary form is required if you are putting the result into a binary format -- for instance a network protocol or embedded into a file format. <> md5 | tcllib