<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>Problem is newline!</div><div><br></div><div><br></div>Testing with string input:<div><br></div><div>Erlang-version:</div><div><br></div><div><div>[ lists:nth(X+1,"0123456789abcdef") || <<X:4>> <= crypto:md5("hello-world")].      </div><div>"2095312189753de6ad47dfe20cbe97ec"</div></div><div><br></div><div><br></div><div>Port with -n flag work!!</div><div><br></div><div><div>18> open_port({spawn,"echo -n hello-world | openssl md5"}, []).</div><div>#Port<0.1075></div><div>19> flush().</div><div>Shell got {#Port<0.1075>,{data,"(stdin)= 2095312189753de6ad47dfe20cbe97ec\n"}}</div><div>ok</div></div><div><br></div><div>Without a -n flag you get a newline in input, does not match</div><div><br></div><div><div>20> open_port({spawn,"echo hello-world | openssl md5"}, []).   </div><div>#Port<0.1076></div><div>21> flush().</div><div>Shell got {#Port<0.1076>,{data,"(stdin)= 8a8933dab8deebe52e30886da1ef6ee2\n"}}</div><div>ok</div></div><div><br></div><div>Same as above.</div><div><br></div><div><div>22> os:cmd("echo hello-world | openssl md5").                      </div><div>"(stdin)= 8a8933dab8deebe52e30886da1ef6ee2\n"</div></div><div><br></div><div>But this is truly strange :-)</div><div><br></div><div>24> os:cmd("echo -n hello-world | openssl md5").</div><div><div>"(stdin)= c298a9eb9b7697afa9b4b7bbd6b012b1\n"</div></div><div><br></div><div>Until you read os.erl and see that the command is mangled into the form:</div><div><br></div><div>os:cmd corresponds in doing the following commands:</div><div><br></div><div>40> Port = open_port({spawn, "/bin/sh -s unix:cmd 2>&1"}, [stream]).</div><div><div>41> erlang:port_command(Port, "(echo -n hello-world | openssl md5) < /dev/null; echo \"\^D\"\n").</div><div>true</div><div>42> flush().</div><div>Shell got {#Port<0.943>,{data,"(stdin)= c298a9eb9b7697afa9b4b7bbd6b012b1\n"}}</div><div>Shell got {#Port<0.943>,{data,[4,10]}}</div><div>ok</div></div><div><br></div><div>Testing a bit more yield:</div><div><br></div><div>64> Port = open_port({spawn, "/bin/sh -s unix:cmd 2>&1"}, [stream]).</div><div>65> erlang:port_command(Port, "(echo -n hello-world | cat) < /dev/null; echo \"\^D\"\n").</div><div>66> flush().</div><div><div>Shell got {#Port<0.1077>,{data,"-n hello-world\n"}}</div><div>Shell got {#Port<0.1077>,{data,[4,10]}}</div></div><div><br></div><div>so  -n is not accepted by /bin/sh version of echo!</div><div>verifying this:</div><div><br></div><div><div>[ lists:nth(X+1,"0123456789abcdef") || <<X:4>> <= crypto:md5("-n hello-world\n")].    </div><div>"c298a9eb9b7697afa9b4b7bbd6b012b1"</div></div><div><br></div><div>/Tony</div><div><br></div><div><br><div><div>On 10 feb 2012, at 06:26, CGS wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><br>Hi,<br><br>Just for my curiosity, does anybody know if crypto:md5/1 in R14B03 is intentionally different from openssl md5? (The sha matches perfectly.)<br><br>Just a short test (Erlang shell):<br>1> RB = crypto:rand_bytes(16).                                                 <br>
<<141,190,84,7,129,230,147,112,200,205,68,80,240,78,68,198>>                    <br>2> MD5 = crypto:md5(RB).                                                       <br><<97,59,0,195,229,254,195,237,238,126,156,14,33,142,206,183>><br>
3> lists:flatten(lists:map(fun([X,Y])->[case X>64 of true -> X+32; false-> X end,case Y>64 of true -> Y+32; false -> Y end];([X])->[$0,case X>64 of true -> X+32; false -> X end] end, lists:map(fun(X)->integer_to_list(X,16) end, binary_to_list(RB)))).                   <br>
"8dbe540781e69370c8cd4450f04e44c6"<br>4> lists:flatten(lists:map(fun([X,Y])->[case X>64 of true -> X+32; false-> X end,case Y>64 of true -> Y+32; false -> Y end];([X])->[$0,case X>64 of true -> X+32; false -> X end] end, lists:map(fun(X)->integer_to_list(X,16) end, binary_to_list(MD5)))).<br>
"613b00c3e5fec3edee7e9c0e218eceb7"<br>5> os:cmd("echo \"8dbe540781e69370c8cd4450f04e44c6\" | openssl md5").          <br>"(stdin)= 6007d8f36b589078f3565b5c90cedffc\n"                                   <br>
<br>As you can see the same rand number, "8dbe540781e69370c8cd4450f04e44c6", gives in crypto:md5 "613b00c3e5fec3edee7e9c0e218eceb7" while in openssl md5 "6007d8f36b589078f3565b5c90cedffc". Please, let me know if I do something wrong.<br>
<br>CGS<br><br>
_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>http://erlang.org/mailman/listinfo/erlang-questions<br></blockquote></div><br><div apple-content-edited="true">
<div><span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Geneva, Arial, Helvetica, sans-serif; font-size: 12px; ">"Installing applications can lead to corruption over time. </span><span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Geneva, Arial, Helvetica, sans-serif; font-size: 12px; ">Applications gradually write over each other's libraries, partial upgrades occur, user and system errors happen, and minute changes may be unnoticeable and difficult to fix"</span></div><div><span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Geneva, Arial, Helvetica, sans-serif; font-size: 12px; "><br></span></div><br class="Apple-interchange-newline">
</div>
<br></div></body></html>