在我的项目中,我有从其他域链接的图像
<img src="http://www.somewhere.com/images/whatever-image.jpg">
我想在本地重新保存一些名称基于其原始src属性的方式,我可以检查以后如果我已经在本地保存了这个图像或没有。我的问题是,当我使用md5()上src属性它是唯一的吗?例子:
$src = "http://www.somewhere.com/images/whatever-image.jpg"
if (file_exists('local_path'.md5($src)) {
...
}
在这种情况下我可以依赖md5()吗?如果没有,如何才能正确地做到这一点?
MD5在这种情况下使用是相当安全的。快速的哈希时间使得它对加密目的不安全,实际上在这里是一个额外的好处。
表示碰撞的概率,例如:MD5产生碰撞之前有多少个随机元素?
另一方面,对于您的目的,只需从源属性值中删除文件路径中不允许的那些字符就足够了,即 $localFileName = str_replace(array('/', ':'), '', $src); //may need to strip '&', too..
这样文件名更易于人类阅读,并且在需要时更易于进一步处理
我认为你可以。碰撞仍然可能发生,但可能性很小。
试试SHA1()
,它会比MD5()
碰撞更少。但是,除非您需要混淆URL,否则根本不需要使用这些散列。只需将字符串保存到数据库中的文本字段中,如果需要,可以运行url_encode()
。这样你就可以无限扩展而不用担心碰撞。
添加当前时间戳到路径。这将确保路径是唯一的。