从emule诞生到现在也已经有了两年左右时间了,随着emule的普及,喜欢他的人也越来越多,但是由于emule对技术相应有一个门槛,不像bt那么容易上手,所以很多朋友很长时间以来一直都有这样或那样的疑问,今天是周末我也献献丑,写一篇关于hash的文章。

大家天天都在使用emule,hash这个词是在emule里面出现频率最高的,那么到底什么是hash呢?

让我们先来了解一些基本知识,作作预热只有这样才能更好的了解hash。

Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。

简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

HASH主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系

了解了hash基本定义,就不能不提到一些著名的hash算法,MD5 和 SHA1 可以说是目前应用最广泛的Hash算法,而它们都是以 MD4 为基础设计的。那么他们都是什么意思呢?
这里简单说一下:

1) MD4
MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年设计的,MD 是 Message Digest 的缩写。它适用在32位字长的处理器上用高速软件实现--它是基于 32 位操作数的位操作来实现的。

2) MD5
MD5(RFC 1321)是 Rivest 于1991年对MD4的改进版本。它对输入仍以512位分组,其输出是4个32位字的级联,与 MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好

3) SHA1 及其他
SHA1是由NIST NSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1 设计时基于和MD4相同原理,并且模仿了该算法。

那么这些Hash算法到底有什么用呢?
Hash算法在信息安全方面的应用主要体现在以下的3个方面:

1) 文件校验
我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
2) 数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。 对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
3) 鉴权协议
如下的鉴权协议又被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

以上就是一些关于hash以及其相关的一些基本预备知识。那么在emule里面他具体起到什么作用呢?

什么是文件的hash值呢?

大家都知道emule是基于P2P (Peer-to-peer的缩写,指的是点对点的意思的软件), 它采用了“多源文件传输协议”(MFTP,the Multisource FileTransfer Protocol)。在协议中,定义了一系列传输、压缩和打包还有积分的标准,emule 对于每个文件都有md5-hash的算法设置,这使得该文件独一无二,并且在整个网络上都可以追踪得到。

MD5-Hash-文件的数字文摘通过Hash函数计算得到。不管文件长度如何,它的Hash函数计算结果是一个固定长度的数字。与加密算法不同,这一个Hash算法是一个不可逆的单向函数。采用安全性高的Hash算法,如MD5、SHA时,两个不同的文件几乎不可能得到相同的Hash结果。因此,一旦文件被修改,就可检测出来。

当我们的文件放到emule里面进行共享发布的时候,emule会根据hash算法自动生成这个文件的hash值,他就是这个文件唯一的身份标志,它包含了这个文件的基本信息,然后把它提交到所连接的服务器。当有他人想对这个文件提出下载请求的时候, 这个hash值可以让他人知道他正在下载的文件是不是就是他所想要的。尤其是在文件的其他属性被更改之后(如名称等)这个值就更显得重要。而且服务器还提供了,这个文件当前所在的用户的地址,端口等信息,这样emule就知道到哪里去下载了.

一般来讲我们要搜索一个文件,emule在得到了这个信息后,会向被添加的服务器发出请求,要求得到有相同hash值的文件。而服务器则返回持有这个文件的用户信息。这样我们的客户端就可以直接的和拥有那个文件的用户沟通,看看是不是可以从他那里下载所需的文件。

对于emule中文件的hash值是固定的,也是唯一的,它就相当于这个文件的信息摘要,无论这个文件在谁的机器上,他的hash值都是不变的,无论过了多长时间,这个值始终如一,当我们在进行文件的下载上传过程中,emule都是通过这个值来确定文件。

那么什么是userhash呢?

道理同上,当我们在第一次使用emule的时候,emule会自动生成一个值,这个值也是唯一的,它是我们在emule世界里面的标志,只要你不卸载,不删除config,你的userhash值也就永远不变,积分制度就是通过这个值在起作用,emule里面的积分保存,身份识别,都是使用这个值,而和你的id和你的用户名无关,你随便怎么改这些东西,你的userhash值都是不变的,这也充分保证了公平性。其实他也是一个信息摘要,只不过保存的不是文件信息,而是我们每个人的信息。

那么什么是hash文件呢?

我们经常在emule日至里面看到,emule正在hash文件,这里就是利用了hash算法的文件校验性这个功能了,文章前面已经说了一些这些功能,其实这部分是一个非常复杂的过程,目前在ftp,bt等软件里面都是用的这个基本原理,emule里面是采用文件分块传输,这样传输的每一块都要进行对比校验,如果错误则要进行重新下载,这期间这些相关信息写入met文件,直到整个任务完成,这个时候part文件进行重新命名,然后使用move命令,把它传送到incoming文件里面,然后met文件自动删除,所以我们有的时候会遇到hash文件失败,就是指的是met里面的信息出了错误不能够和part文件匹配,另外有的时候开机也要疯狂hash,有两种情况一种是你在第一次使用,这个时候要hash提取所有文件信息,还有一种情况就是上一次你非法关机,那么这个时候就是要进行排错校验了。

关于hash的算法研究,一直是信息科学里面的一个前沿,尤其在网络技术普及的今天,他的重要性越来越突出,其实我们每天在网上进行的信息交流安全验证,我们在使用的操作系统密钥原理,里面都有它的身影,特别对于那些研究信息安全有兴趣的朋友,这更是一个打开信息世界的钥匙,他在hack世界里面也是一个研究的焦点

到底什么是hash?它起什么作用?相关推荐

  1. java中hash值什么意思_到底什么是hash?它起什么作用?

    从emule诞生到现在也已经有了两年左右时间了,随着emule的普及,喜欢他的人也越来越多,但是由于网络 从emule诞生到现在也已经有了两年左右时间了,随着emule的普及,喜欢他的人也越来越多,但 ...

  2. hash地址_到底什么是Hash?

    到底什么是hash hash算法的概念 Hash: 一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通 ...

  3. 到底什么是hash呢?hash碰撞?为什么HashMap的初始容量是16?

    一 ,到底什么是hash呢? 作者:知乎用户 链接:https://www.zhihu.com/question/26762707/answer/40119521 来源:知乎 著作权归作者所有.商业转 ...

  4. hash算法_到底什么是Hash?Hash算法的原理和实际应用讲解

    提到hash,相信大多数同学都不会陌生,之前很火现在也依旧很火的技术区块链背后的底层原理之一就是hash,下面就从hash算法的原理和实际应用等几个角度,对hash算法进行一个讲解. 1.什么是Has ...

  5. 到底什么是hash partition?

    最近在flink的dataset api中看到了hash-partition的概念. 下面这个解释[1]比较清晰: Techopedia explains Hash Partitioning Hash ...

  6. mybatis-plus对datetime返回去掉.0_0欧姆电阻到底有没有用?这12个作用说明其不可或缺...

    1.在电路中没有任何功能,只是在PCB上为了调试方便或兼容设计等原因. 2.可以做跳线用,如果某段线路不用,直接不贴该电阻即可(不影响外观) 3.在匹配电路参数不确定的时候,以0欧姆代替,实际调试的时 ...

  7. 编程语言中,到底什么是变量,变量的作用是什么?

    1.变量的主要作用,就是用来存储信息,然后在计算机程序中使用这些信息. 2.通过给变量赋值,也将数据与一些能够描述的名字连接起来,简单说,就是给数据一个能让人理解的名字,12可以指年龄,也可以指距离, ...

  8. PyPi到底是什么?pypi有啥作用?PyPi和pip有何渊源?

    可能有很多刚入行不久的朋友们,每天都在用pip 命令install 一些python软件包,却对pypi 不甚了解,那这个pip和pypi之间有什么练习和区别呢?下面就带大家简单有个了解吧!希望能够帮 ...

  9. 关于hash哈希以及为什么python中dict和set的key必须为不可变对象

    引用自-vczh 源:https://segmentfault.com/q/1010000004077532 哈希值是由哈希函数从一个给定的数据计算出来的.哈希函数H和数据v满足如下要求: 1.需要有 ...

最新文章

  1. 在markdown中设置字体颜色以及背景颜色
  2. vscode 最好的ui主题
  3. 9适应之力加多少攻击_剑盾铠之孤岛DLC新增内容大全! 宝可梦史上第一款DLC到底香不香(含试玩视频)...
  4. 【Angular专题】——(1)Angular,孤傲的变革者
  5. Git的使用教程(二)
  6. r roc曲线 语言_R语言系列6:生存分析中多重时间依赖性ROC曲线绘制 timeROC
  7. mysql 5.6 解压缩版安装教程
  8. 【算法笔记】输出st-en的所有路径(DAG--dfs)
  9. 百度网盘怎么设置提取码 百度网盘自定义提取码方法
  10. jndi step by step(2)
  11. UE4UI制作_MainMenu
  12. java 创建gbase,GBase 8t使用Java UDR的方法
  13. 从Alexander Egyed的论文看程序语言和软件工程的论文写作风格差异
  14. 花前病酒的学拳笔记,杨氏叶派,叶家拳,暂时1-19
  15. 业务流程优化与信息化到底有多远?
  16. VS2015:解决VS2015许可证已过期的问题
  17. 安卓开发API版本选择
  18. 给初学者推荐的10个Python免费学习网站,赶紧收藏吧
  19. LeetCode 31-40题
  20. Python3-豆瓣电影影片差评和影片封面照片的爬取

热门文章

  1. linux sql server客户端,Linux的MS SQL Server客户端SQuirrel SQL Client
  2. android 动画x轴旋转,Android Roate3dAnimation实现围绕y轴竖直方向或者绕x轴方向旋转的3d动画效果...
  3. 虚拟机linux 8.04汉化,在虚拟机中快速安装 Ubuntu 18.04
  4. mysql timestamp 更新_[mysql] timestamp自动更新和初始化
  5. Python 对图像进行base64编码及解码读取为numpy、opencv、matplot需要的格式
  6. Python Qt GUI设计:窗口之间数据传递(拓展篇—5)
  7. 基于颜色特征,形状特征和纹理特征的数字图像的检索(Digital Image Retrieval)MATLAB GUI实现
  8. pyqt5 视频播放器
  9. 获取系统时间精确到毫秒级C++代码实现
  10. VSCode用浏览器预览/运行html文件