360秒传原理

前阵子网盘血拼,我记得当时师弟兴奋的告诉我,360网盘免费1T,有了360,童鞋们再也不用担心老师没地方放了!哈哈哈,玩笑。害我又是手机验证,又是安装360,终于等来了1T网盘,结果他妈的,百度第二天说送2T.腾讯也送2T........你们就血拼吧

然后就看到了360来了个秒传,传了电脑里的一个操作系统镜像,果然,1.8G的资料,真的是妙传。细想,我的家庭网速逆天也就4M,所以肯定是根本就没把我的文件上传上去;

然后一想最近公司项目里也在搞一个虚拟磁盘方面的东西,一想哦,原来是MD5的应用;

360网盘首先会检查文件的MD5值,对于检测文件的MD5(,必须是在用户端检测,每一个文件都可以做MD5运算,得到一个唯一的MD5值,不管这个文件多大,我这里写了一个简单的做MD5运算的测试,不管我的文件多大,其都生成了一个长度是一样的MD5值;每一个文件的MD5都是唯一的,(哪怕是改动一位,都会生成不同的MD5)所以,网盘根据生成的文件MD5值在其服务器数据库里查询,有没有MD5值一样的文件,如果有,说明,有人已经上传过了,所以给我们用户也没必要再一次上传。给我们在网盘里一个链接就可以了,下次需要下载,直接连接到已上传的资源。
360不会给你复制一份到你的网盘的,好像没那么傻吧.......

下面是一段算MD5的代码,用C#写的

 ///
        //文件的MD5值
        //用于文件验证!比如网络传输,防止文件内容被恶意篡改
        //可以有这么个思想:一个软件有很多的文件,先把每一个文件的内容MD5,所有文件的MD5拼接成一个字符串,在MD5,
        //那么,可以对整个应用软件做保护!防止简单的exe替换,或者其他篡改!
        ///
        static string GetFileHash(string FilePath)
        {
           using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
           using (FileStream fs = new FileStream(FilePath, FileMode.Open,
               FileAccess.Read, FileShare.Read))
           {
               return BitConverter.ToString(md5.ComputeHash(fs)).Replace("-", " ");
           }
        }

代码网上到处是.......

这样不好的就是会占用用户端的CPU资源,内存到不是会占用;MD5算法就不去研究了,绝对不是把一个文件全部写入到内存然后做MD5运算的,要不然,没内存啊,我这个实验中,启动之前就用了1.6G了,还测试的是一个1.7G的文件,所以,MD5运算应该分多次,每一次是固定取多少字节去运算的。




©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页