有好几次碰到使用Linux的md5sum命令产出的散列值,跟PHP的md5函数,或者MySQL的md5函数产生的不一样的问题.
通常比较懒,就没细想,直接使用PHP产生的算了;没想过难道算法还会有不同.

其实没有不同的算法,md5在哪里的计算方法只有一个.原因不过是因为使用md5sum时,有时候不小心会把换行符也作为计算的内容,结果实际上是散列的对象不同,自然结果也就不同了.而在Linux命令行状态下,我通常注意不到换行的存在.

以字符串’123′为例,PHP的计算结果是:

$ php -r 'echo md5("123");'
202cb962ac59075b964b07152d234b70

比如下列语句实际上是对”123\n”进行求散列,而不是对’123′求散列.

$ echo '123' | md5sum
ba1f2511fc30423bdbb183fe33f3dd0f

正确的写法应该是通过echo的’-n’选项,让echo不要输出换行符,这样结果就一样了.

$ echo -n '123' | md5sum
202cb962ac59075b964b07152d234b70

相关文章

    共享到: