最近,我试图从* nix中使用md5sum和PHP的MD5()函数计算MD5。 结果可能会让你大吃一惊 - 他们不匹配的情况下,你希望他们匹配。 这里是解释为什么,以及如何解决。
首先,让我们来看看在下面的测试: > php -r 'echo md5( "eee" );' d2f2297d6e829cd3493aa7de4416a18f
> echo "eee"|md5sum 5536fc9343e9ab0aca071354084dd3cc -
> echo "eee" > /tmp/e > md5sum /tmp/e 5536fc9343e9ab0aca071354084dd3cc /tmp/e
> vi /tmp/w <put eee in the file> > md5sum /tmp/w 5536fc9343e9ab0aca071354084dd3cc /tmp/w
> php -r 'echo md5( "eee\n" );' 5536fc9343e9ab0aca071354084dd3cc
所以你可以看到它看起来像md5sum的添加了一个换行符到每一个文本,你想获得哈希为年底。 我也陷入这种错觉,但一点点的调查表明,这不是真的。 这里的证明:
> md5sum eee<Hit Ctrl-D twice here>d2f2297d6e829cd3493aa7de4416a18f
事实是,回声输出添加换行符,所以你必须使用-n标志: > echo -n "eee"|md5sum d2f2297d6e829cd3493aa7de4416a18f -
大多数编辑添加换行符到文件的末尾,即使你不希望出现这种情况: > od -a /tmp/w 0000000 eee nl 0000004
看到最后NL? md5sum和MD5()所以做工精细,只是要小心你的方式使用它。 这篇文章发表在如何 , Linux上 , 网络 。 |
2008年7月21日,10:06下午
呼应“EEE”> / tmp / E中
这是将文件的末尾添加新行的行。
不要'ECHO-N',而不是
2008年7月22日,8:42上午
>尝试`回声-N',而不是
这正是后建议。 你叫什么?
2009年9月17日下午4:13
感谢!
CLI的不可见字符(即换行符)是很难发现的。