SHA是否足以检查文件重复? (PHP中的sha1_file)
|
假设您想创建一个文件托管站点供人们上传他们的文件并发送链接给他们的朋友以便以后检索它,并且您希望确保文件在我们存储的地方重复,PHP的sha1_file是否足以完成任务?有没有理由不使用md5_file? 对于前端,它将使用数据库中的原始文件名存储来模糊,但是如果这将揭示有关原始海报的任何内容,则会有一些额外的问题.文件是否继承了上次修改过的任何元信息,或者是谁发布过的,或者是基于文件系统的东西? 另外,使用盐轻浮,因为彩虹表攻击的安全性对此没有任何意义,哈希以后可以用作校验和? 最后一点,可伸缩性?最初,它只会用于几个megs的小文件,但最终… 编辑1:哈希的主要目的是避免文件重复,而不是创建模糊. sha1_file足够好吗?使用sha1_file就足够了,碰撞的可能性非常小,但这种情况几乎不会发生.为了减少几乎0比较文件大小的几率: function is_duplicate_file( $file1,$file2)
{
if(filesize($file1) !== filesize($file2)) return false;
if( sha1_file($file1) == sha1_file($file2) ) return true;
return false;
}
md5比sha1快,但它产生的独特输出较少,使用md5时碰撞的机会仍然很小. 可扩展性? 有几种比较文件的方法,使用哪种方法取决于您的性能问题,我对不同的方法进行了小测试: 1-直接文件比较: if( file_get_contents($file1) != file_get_contents($file2) ) 2- Sha1_file if( sha1_file($file1) != sha1_file($file2) ) 3- md5_file if( md5_file($file1) != md5_file($file2) ) 结果: -------------------------------------------------------- method time(s) peak memory -------------------------------------------------------- file_get_contents 0.5 2,721,576 sha1_file 1.86 142,960 mdf5_file 1.6 142,848 file_get_contents比sha1快3.7,但它不是内存效率. Sha1_file和md5_file是内存高效的,它们使用了file_get_contents使用的内存的大约5%. md5_file可能是更好的选择,因为它比sha1快一点. 因此,结论是,如果您想要更快的比较或更少的内存使用,它取决于它. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- php 反斜杠处理函数addslashes()和stripslashes()实例详解
- php simplexmlElement操作xml的命名空间实现代码
- curl实现站外采集的方法和技巧
- $_GET中具有转义的符号的php – htaccess重写规则失败
- PHP应用:Windows平台实现PHP连接SQL Server2008的方法
- linux 下 php 安装 event
- php方法调用模式与函数调用模式简例
- PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pd
- 解决PHP程序运行时:Fatal error: Maximum execution time
- php 判断字符串是否中文/英文/数字实现方法
