使用 sha1_file() 判断两个图片(或者文件)是否完全相同

学习笔记 马富天 2019-01-03 17:12:29 78 0

【摘要】在 Web 应用中,随着用户上传图片,如商品图片、个人头像,可能会出现重复上传,而我们在上传之前进行判重处理,就可以节省空间。也可以将文件下所有多余相同图片进行删除。(其实这也是我 2017 年参加搜狐校招的一道面试题,没答上来,最后凉凉)

代码很简单,如下:

  1. $file1 = "1.jpg";
  2. $file2 = "2.jpg";
  3. $a = sha1_file($file1);
  4. $b = sha1_file($file2);
  5. if($a == $b)
  6. {
  7. 	echo "yes";
  8. }else
  9. {
  10. 	echo 'no';
  11. }

当然,不仅仅是图片可以进行判断,也是一个其它文件,如 .txt , .html , .rar 等等都可以。这里主要讲解一下原理:

sha1_file():用于计算指定的文件的 sha1 散列值。该散列值是一个 40 字符长度的十六进制数字,成功返回一个字符串,否则返回 FALSE。

SHA1 是一种数据加密算法,该算法是目前公认的最安全的散列算法之一。用于接收一段明文,以一种不可逆的方式将它转换成一段密文。

由于每个文件的 SHA1 散列值都是唯一的,而不同图片的编码顺序都是不同的,得出的图片散列值也是不同的,所以可以采用此方法进行判断两张图片是否相同。

这里再讲解一个应用场景,有助于理解本文的原理,当我们在网络中下载文件时(,我们要怎么确保下载的文件准确无误呢(文件没有被病毒感染或者恶意篡改等等情况),这里通常网站就会提供该文件的校验值,如 MD5、SHA1 (统称为摘要算法)等等值,所以我们可以手动计算出该文件的校验值,若与网站上提供的一样,我们就可以放心的使用了。

版权归 马富天个人博客 所有

本文标题:《使用 sha1_file() 判断两个图片(或者文件)是否完全相同》

本文链接地址:http://www.mafutian.com/406.html

转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

0

0

上一篇《 PHP 下载文件【通用版本】 》 下一篇《 MySQL 直接复制 data 目录下文件备份数据库时需要注意的几点 》

暂无评论

评论审核未开启
表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情
验证码

TOP10

  • 浏览最多
  • 评论最多