php bin2hex,base64_encode;不同的输入相同的输出(循环)?

时间:2011-02-16 17:36:02

标签: php hash decode encode

我试图创建一个文件名哈希(键)和文件名(值)的数组,但我使用的大多数函数似乎都没有像我希望的那样工作......

为什么这些函数在循环中使用时会在输入字符串变化时产生相同的输出字符串? md5和sha1没有这个问题,但是不可逆,这是必需的。

foreach ($files as $file)
{
  debug(array(bin2hex($file), $file));
}

// result
app/views/helpers/monolith.php (line 45)

Array
(
    [0] => 2f686f6d652f6d746572736d697474656e2f7075626c69635f68746d6c2f6170702f707269766174652f6d622f323031302f31322e706466
    [1] => /home/mtersmitten/public_html/app/private/mb/2010/12.pdf
)


app/views/helpers/monolith.php (line 45)

Array
(
    [0] => 2f686f6d652f6d746572736d697474656e2f7075626c69635f68746d6c2f6170702f707269766174652f6d622f323031302f31312e706466
    [1] => /home/mtersmitten/public_html/app/private/mb/2010/11.pdf
)


app/views/helpers/monolith.php (line 45)

Array
(
    [0] => 2f686f6d652f6d746572736d697474656e2f7075626c69635f68746d6c2f6170702f707269766174652f6d622f323031302f31302e706466
    [1] => /home/mtersmitten/public_html/app/private/mb/2010/10.pdf
)

我希望这个例子更清楚......

2 个答案:

答案 0 :(得分:4)

实际上字符串是不同的。你应该仔细检查一下。它们在大多数情况下是相同的,因为 bin2hex base64_encode 都会对字节序列进行编码,并且不会生成像 sha1 或<强> MD5

bin2hex 只是将字符串中的每个字符转换为十六进制值,对于 base64 ,请检查wikipedia article以确定字符串是否相同大部分结果

答案 1 :(得分:2)

 ... f6d622f323031302f31322e706466
                         ^
                       1 2 . p h p
 ... f6d622f323031302f31312e706466
                         ^
                       1 1 . p h p
 ... f6d622f323031302f31302e706466
                         ^
                       1 0 . p h p

你的“哈希”在我指出的地方有所不同。 bin2hex不是加密或散列,它只是取输入字符串的每个字符并将其转换为其十六进制ascii代码的字符串版本。