【问题标题】:php bin2hex, base64_encode; different input same output (in loop)?php bin2hex,base64_encode;不同的输入相同的输出(循环中)?
【发布时间】:2011-02-16 17:36:02
【问题描述】:

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

为什么在循环中使用这些函数会导致相同的输出字符串而输入字符串不同? 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
)

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

【问题讨论】:

  • 我无法与 bin2hex() 交谈 - 也许它只是使用了输入字符串的一部分或扼流圈或其他东西 - 但 base64_encode() 应该可以正常工作。
  • 你应该再看看。钥匙确实不一样。 3132 是 12.pdf 的十六进制编码,3131 是 11.pdf。也许你应该解释你的用例。因为您现在使用的密钥只是经过混淆的文件名。
  • 我发布了一个更好(简单)的例子...

标签: php hash decode encode


【解决方案1】:

事实上,字符串是不同的。你应该更仔细地检查。它们大部分是相同的,因为 bin2hexbase64_encode 都对字节序列进行编码,并且不会生成像 sha1 或 md5。

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

【讨论】:

    【解决方案2】:
     ... f6d622f323031302f31322e706466
                             ^
                           1 2 . p h p
     ... f6d622f323031302f31312e706466
                             ^
                           1 1 . p h p
     ... f6d622f323031302f31302e706466
                             ^
                           1 0 . p h p
    

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

    【讨论】:

    • 感谢一百万!你认为 bin2hex 适合将文件名传递给 url 吗?
    • 没有。 bin2hex 的最佳和最坏情况大小增加了 2 倍 - 它总是使字符串的长度加倍。为什么不直接使用 urlencode()?最好的情况是长度没有变化,最坏的情况是双倍,平均情况只是多几个字节。
    • 任何字符串都可以是数组键,包括空字符串。
    猜你喜欢
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    相关资源
    最近更新 更多