0

在我的项目中,我有从其他域链接的图像

<img src="http://www.somewhere.com/images/whatever-image.jpg">

我想使用基于其原始 src 属性的某个名称在本地重新保存它,以便稍后检查我是否已经在本地保存了此图像。我的问题是,当我在src -attribute上使用md5()时,它是唯一的吗?例子:

$src = "http://www.somewhere.com/images/whatever-image.jpg"
if (file_exists('local_path'.md5($src)) {
...
}

在这种情况下我可以依靠md5()吗?如果没有,如何正确完成?

4

4 回答 4

2

在这种情况下使用 MD5 是相当安全的。快速散列时间,这使得它对于加密目的不安全,实际上是这里的一个奖励。

对于冲突的概率,例如阅读:在 MD5 产生冲突之前有多少随机元素?

另一方面,出于您的目的,只需从源属性值中删除文件路径中不允许的那些字符就足够了,即

$localFileName = str_replace(array('/', ':'), '', $src); //may need to strip '&', too..

这样,如果需要,文件名更易于人类阅读并且更容易进一步处理

于 2013-04-23T16:19:46.673 回答
0

我想你可以。碰撞仍然可能发生,但这是非常罕见的可能性。

于 2013-04-23T15:56:33.350 回答
0

试一试SHA1(),它会碰撞不到MD5()。但是,除非您需要对 URL 进行模糊处理,否则您根本不需要使用这些哈希值。只需将字符串保存到数据库中的文本字段中,url_encode()如果需要可以运行。通过这种方式,您可以无限扩展而无需担心碰撞。

于 2013-04-23T15:58:03.783 回答
0

将当前时间戳添加到路径。这将确保路径是唯一的。

于 2013-04-23T15:58:46.443 回答