【问题标题】:Need advice on checking a array for changes需要有关检查数组更改的建议
【发布时间】:2019-03-05 15:02:01
【问题描述】:

我正在开展一个项目,该项目将信息从外部 API 保存到数据库中。这个 API 只显示最新的可用信息,所以我需要检查这个 API 并与我自己的数据库信息进行比较,看看是否有新的变化。

之前,我通过手动比较每个值来做到这一点:

if($externalapi['item'] !== $mydatabase['item']) {
    // changes detected!
}

现在我正在制作这个项目的 V2,我觉得这不是正确的方法,我应该采取不同的方式。

我考虑过对外部 API 输出和我自己的数据库输出进行 MD5 处理,并比较这两者。

if(md5($externalapi) !== md5($mydatabase)) {
    // changes detected!
}

但我不确定这有多可靠。

最好的方法是什么?

【问题讨论】:

  • 如果您比较关心数据安全,建议不要使用此功能。您可以在这里查看php.net md5
  • 除非您的数据结构非常复杂,否则比较所有键的值的简单循环可为您提供 100% 准确的解决方案,并且应该足够快以满足您的目的。

标签: php compare md5


【解决方案1】:

在确定此类用途的哈希函数的可靠性时,您可能会对加密哈希的“生日问题”名称冲突概率感兴趣。例如,如果您在 100 年内每秒对数十亿个不同的列表进行哈希处理,我相信一个典型的 MD5 哈希将有 50% 的机会产生名称冲突。

搜索加密哈希的“生日问题”或“姓名冲突”概率将为您提供理解可靠性所需的所有数学知识。

【讨论】:

  • 感谢您的意见,科迪。所以 MD5 对于这项工作可能不够可靠。什么是检查数组变化的可靠方法?
  • 在我看来,MD5 是一种快速散列,具有足够的输出范围来处理此类问题。如果失败事件如此令人担忧,并且您想过度解决问题,那么您始终可以使用具有更大输出的哈希,例如 sha-512,在人类仍然存在的情况下可能不会发生任何冲突。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
相关资源
最近更新 更多