Re: Reproducing a hash code
- To: mathgroup at smc.vnet.net
- Subject: [mg83031] Re: Reproducing a hash code
- From: "Steve Luttrell" <steve at _removemefirst_luttrell.org.uk>
- Date: Thu, 8 Nov 2007 06:07:37 -0500 (EST)
- References: <fgmppa$9i5$1@smc.vnet.net><fgp9kp$in7$1@smc.vnet.net> <fgs7m5$3h5$1@smc.vnet.net>
Excellent diagnosis and solution. Thank you both. -- Steve Luttrell West Malvern, UK "Mark Fisher" <particlefilter at gmail.com> wrote in message news:fgs7m5$3h5$1 at smc.vnet.net... > On Nov 6, 3:46 am, michael.p.crouc... at googlemail.com wrote: >> On 5 Nov, 10:03, "Steve Luttrell" >> >> >> >> <steve at _removemefirst_luttrell.org.uk> wrote: >> > I am trying to get results from Mathematica's Hash function (for hash >> > type >> > "MD5") that are consistent with the results obtained using "openssl >> > md5" in >> > Linux. >> >> > The particular example I would like to reproduce is >> > onhttp://wiki.secondlife.com/wiki/LlMD5String, where >> >> > "Hello, Avatar!:0" >> >> > hashes to (for hash type "MD5") >> >> > 112abd47ceaae1c05a826828650434a6 >> >> > In Mathematica 6 (Windows Vista, Intel hardware), doing the obvious >> >> > Hash["Hello, Avatar!:0", "MD5"] // BaseForm[#, 16] & >> >> > I get the following result >> >> > a8c2ab1662a37cb9f8ea5af154a48c52 >> >> > This is not the same as expected. Does anyone know how to get >> > consistent >> > results? >> >> > -- >> > Steve Luttrell >> > West Malvern, UK >> >> Hi Steve >> >> It seems that Mathematica includes the enclosing quotes "" when it >> generate it's hash: >> >> As you point out, in Mathematica 6 (on windows and Linux) if we do >> Hash["Hello, Avatar!:0", "MD5"] // BaseForm[#, 16] & >> we get >> a8c2ab1662a37cb9f8ea5af154a48c52 >> >> Now onto our linux box - if we do (notice the extra quotes I have >> added) >> >> echo -n '"Hello, Avatar!:0"' | openssl md5 >> >> we get >> >> a8c2ab1662a37cb9f8ea5af154a48c52 >> >> as before. >> Hope this helps, >> Mike > > Now that Mike has diagnosed the problem, here's a solution: > > StringHash[string_String, type_:"MD5"] := > Module[{stream, file, hash}, > stream = OpenWrite[]; > WriteString[stream, string]; > file = Close[stream]; > hash = FileHash[file, type]; > DeleteFile[file]; > hash > ] > > Then > > StringHash["Hello, Avatar!:0"] // BaseForm[#, 16] & > > produces > > 112abd47ceaae1c05a826828650434a6 > > --Mark > >