在我的项目中,我从其他域
链接了图像<img src="http://www.somewhere.com/images/whatever-image.jpg">
我想在本地重新保存一些名称,基于其原始的src-attribute ,如果我已经在本地保存此图像,我可以稍后检查。我的问题是,当我在 src上使用 md5() - 属性时,它是唯一的吗?例如:
$src = "http://www.somewhere.com/images/whatever-image.jpg"
if (file_exists('local_path'.md5($src)) {
...
}
在这种情况下我可以依赖 md5()吗?如果没有,如何做到这一点?
答案 0 :(得分:2)
在这种情况下使用MD5非常安全。快速散列时间使加密目的不安全,实际上是一个奖励。
对于碰撞的概率,例如:How many random elements before MD5 produces collisions?
另一方面,为了您的目的,只需从源属性值中删除文件路径中不允许的那些字符就足够了,i。即
$localFileName = str_replace(array('/', ':'), '', $src); //may need to strip '&', too..
这样,文件名更具人性化,并且在需要时更容易进一步处理
答案 1 :(得分:0)
我想你可以。碰撞仍然可能发生,但这种情况非常罕见。
答案 2 :(得分:0)
尝试SHA1()
,它会发生小于MD5()
的冲突。但是,除非您需要对网址进行模糊处理,否则根本不需要使用这些哈希值。只需将字符串保存到数据库的文本字段中,如果需要,可以运行url_encode()
。通过这种方式,您可以无限缩放而无需担心碰撞。
答案 3 :(得分:0)
将当前时间戳添加到路径中。这将确保路径是唯一的。