将整个PHP数组散列为唯一值

lon*_*oat 37 php arrays hash

寻找一种方法来生成给定PHP数组的文件名安全哈希.我现在正在做:

$filename = md5(print_r($someArray, true));
Run Code Online (Sandbox Code Playgroud)

...但是感觉"hacky"使用print_r()生成每个数组唯一的字符串.

有什么明智的想法,以更清洁的方式做到这一点?

编辑 嗯,似乎每个人都认为序列化更适合这项任务.有什么理由吗?我不担心在变量散列后检索变量的信息(这很好,因为它是单向散列!).谢谢你的回复!

Mic*_*ski 70

md5(serialize())而不是print_r().

print_r()其目的主要是作为调试功能,并且格式化为纯文本显示,而serialize()将数组或对象表示编码为紧凑文本字符串,以便在数据库或会话存储(或任何其他持久性机制)中保持持久性.

  • 正如@gogowitsch 在链接中指出的那样,您还需要考虑数组的排序。 (2认同)

gen*_*nry 24

或者你可以使用json_encode

  • 使用 json_encode 提供散列种子是不安全的。例如,如果您与 json_encode 一起使用的数组具有非 UTF-8 字符,则 json_encode 将返回 false,这将使您的所有 md5 哈希值相同。 (2认同)

Pek*_*ica 9

serialize() 应该工作正常.

它还具有__sleep在对象上调用magic方法的额外优势,并且是整体PHP中最干净的序列化方法.


Dam*_*amp 6

怎么样序列化?

$filename = md5(serialize($someArray));