当前位置: 首页 > 编程日记 > 正文

到底什么是hash?它起什么作用?

从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世界里面也是一个研究的焦点

相关文章:

20个精美图表,教你玩转 Pyecharts 可视化

作者 |俊欣来源 |关于数据分析与可视化本篇文章我们将继续聚焦c模块并且用它来绘制精美的图表,希望读者在看完之后会有不少收获01内嵌饼状图内接一个环状的饼图,里面还有一个饼状的图(Pie().add(series_name"访问来源",data_pair[list(z) for …

【SICP练习】136 练习3.67

练习3-67 原文 Exercise 3.67. Modify the pairs procedure so that (pairs integers integers) will produce the stream of all pairs of integers (i,j) (without the condition i < j). Hint: You will need to mix in an additional stream. 代码 (define (all-pairs s…

glibc方式安装mysql

下载安装包 mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz创建mysql用户useradd -r mysql -s /sbin/nologin解压文件tar -zxvf mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz -C /opt/改名mv /opt/mysql-5.6.38-linux-glibc2.12-x86_64/ /opt/mysql-5.6创建数据目录mkdir /data更…

淘宝网7年变化图--建议非美工UED人员也看看

从2003年开始&#xff0c;这么几年间淘宝网首页截图&#xff0c;UED美工和开发人员都可以看看。图片来自www.infoq.com网站 的PPT

Github 一夜爆火:这份金九银十 Java 面试手册我给跪了

这几天给筒子们整理了一份《Java面试手册》&#xff0c;106页&#xff0c;目前大约6万字左右&#xff0c;初衷也很简单&#xff0c;就是希望在面试的时候能够帮助到大家&#xff0c;减轻大家的负担和节省时间。废话不多说&#xff0c;本手册目前为第一版&#xff0c;后续慢慢也…

a different object with the same identifier value was already associated with the session

当出现a different object with the same identifier value was already associated with the session时&#xff0c;一般是因为在hibernate中同一个session里面有了两个相同标识但是是不同实体。 我直接将接受需要比较的id的list<ab>换成了list<object[]>,再直接将…

【转】unity3d 在UGUI中制作自适应调整大小的滚动布局控件

转自 http://blog.csdn.net/rcfalcon/article/details/43459387 在游戏中&#xff0c;我们很多地方需要用到scroll content的概念&#xff1a;我们需要一个容器&#xff0c;能够指定布局方式&#xff08;比如横排排列、竖排排列、网格排列&#xff09;等。然后我们向其中填充内…

(转)径向模糊效果shader

转自&#xff1a;http://blog.csdn.net/xoyojank/article/details/5146297 最先在这里看到:http://www.gamerendering.com/2008/12/20/radial-blur-filter/ 这效果在鬼泣4中切换场景时见过, 极品飞车12的运动模糊也有这种感觉. 原理: 确定一个中心点(如0.5, 0.5), 跟当前像素连…

初次体验hiphop-php

facebook在github上发布了hiphop-php的源代码。之前听说这玩意能把php代码翻译成c代码&#xff0c;然后带来巨大的性能提升&#xff0c;所以第一时间编译了一份hiphop-php。 我的机器环境是 Centos 5.3 x86_648G内存Intel(R) Xeon(R) CPU E5420 2.50GHz 安装注意事项 编译…

MySQL之父等国际数据库掌门人齐聚,1024 程序员节全体大会重磅官宣!

10月23-24日&#xff0c;由CSDN、长沙市政府及多家机构联合主办的第二届“长沙中国1024程序员节”&#xff08;1024.csdn.net&#xff09;将盛大举行。今年程序员节活动囊括&#xff1a;岳麓书院尖峰对话&#xff0c;2021技术英雄会&#xff0c;9场热门技术主题论坛/专场、第16…

通过yum安装配置lamp

1、安装httpdyum install httpd创建测试文件cd /var/www/htmlvim index.php加入以下内容<html><head><title>PHP Page</title></head><body><h1>PHP start</h1> <?phpphpinfo(); ?><h1>PHP end</h1> <…

PHP“Cannot use object of type stdClass as array”

php再调用json_decode从字符串对象生成json对象时&#xff0c;如果使用[]操作符取数据&#xff0c;会得到下面的错误错误&#xff1a;Cannot use object of type stdClass as array产生原因&#xff1a;展开 -PHP$res json_decode($res);$res[key]; //把 json_decode() 后的对…

RMAN_学习笔记1_RMAN Structure概述和体系结构

2014-12-23 Created By BaoXinjian 一、摘要 是一种用于集备份(backup)、还原(restore)和恢复(recover)数据库于一体的Oracle 工具&#xff0c;支持命令行及图形界面操作 能够备份整个数据库、表空间、数据文件、控制文件、归档文件以及Spfile参数文件。 支持增量数据块级别的备…

全球缺芯大潮中,以软代硬能否另辟蹊径?

在5G和人工智能的技术浪潮如约而至以后&#xff0c;业内人士无不对IoT产业的未来报以极大的期待。以人工智能和家居设备为基础&#xff0c;再加上算力与网络支持&#xff0c;有理由相信未来IoT相关产业必将迎来爆发。然而今年&#xff0c;席卷全球的芯片产能不足问题影响到了各…

Xtrabackup实现数据的备份与恢复

Xtrabackup介绍Xtrabackup是由percona开源的免费数据库热备份软件&#xff0c;它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份&#xff08;对于MyISAM的备份同样需要加表锁&#xff09;&#xff1b;mysqldump备份方式是采用的逻辑备份&#xff0c;其最大的缺陷是备份…

最简单的CI框架入门示例--数据库取数据

这个写给初学者看&#xff0c;这是最简单可以调通的例子&#xff0c;网上很多例子其实初学者本地跑不通&#xff0c;缺这少那。 1.下载CI框架&#xff08;自己找&#xff09;2.配置 database.php配置&#xff1a; 为数据库服务器设置 connection 参数&#xff1a; $db[defau…

ST-GCN 实现人体姿态行为分类

作者 | 李秋键 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 引用 人体行为识别是计算机视觉及机器学习方面的热门研究领域。它在对视频中的人类行为进行运动分析、行为识别乃至延伸至人机交互领域都有着非常广泛的应用。研究初期&#xff0c;人体行为识别主要是以…

【原创】Kakfa utils源代码分析(三)

Kafka utils包最后一篇~~~ 十五、ShutdownableThread.scala可关闭的线程抽象类&#xff01; 继承自Thread同时还接收一个boolean变量isInterruptible表明是否允许中断。既然是可关闭的&#xff0c;因此一定不是守护线程&#xff0c;而是一个用户线程(不会阻塞JVM关闭)。提供的方…

Oracle的分页查询

为什么80%的码农都做不了架构师&#xff1f;>>> 因为Oracle不像MySQL一样有limit函数来实现分页查找&#xff0c;oracle要实现分页查询可使用关键字rownum来处理。使用rownum有以下几点需要注意&#xff1a; 1、ROWNUM存在使用规则&#xff0c;在单个子查询中&…

微软成功抵御峰值高达 2.4Tbps 的 DDoS 攻击

整理 | 祝涛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;微软表示&#xff0c;他们成功抵御了一场发生于8月份的2.4Tbps分布式拒绝服务&#xff08;DDoS&#xff09;攻击&#xff0c;这次攻击超过了去年针对亚马逊Web服务的2.3Tbps最大攻击。这场攻击持续…

百度吴甜:首席AI架构师培养计划持续为行业输送高端复合型AI人才

CSDN 导语&#xff1a; 随着 AI 技术的发展&#xff0c;关注 AI 的开发者与日俱增&#xff1a;据 CSDN 发布的《中国 AI 应用开发者报告》显示&#xff0c;在 CSDN 的注册开发者中&#xff0c;689 万开发者有阅读、撰写和研究 AI 技术行为&#xff0c;其中精准聚焦 AI 学习和应…

Htaccess文件是什么以及Windows下自由创建.htaccess文件的N种方法

.htaccess是什么 概述来说&#xff0c;htaccess文件是Apache服务器中的一个配置文件&#xff0c;它负责相关目录下的网页配置。 通过htaccess文件&#xff0c;可以帮我们实现&#xff1a;网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访…

Linux grep,egrep及相应的正则表达式用法详解

linux在进行文本处理过程中的文本搜索工具称为正则表达式。文本搜索工具有grep、egrep、fgrep,egrep为正则表达式的扩展正则表达式&#xff0c;fgrep用于搜索文本字符串&#xff0c;与 grep 和 egrep 命令不同&#xff0c;因为它搜索字符串而不是搜索匹配表达式的模式。grep的含…

Java GC 日志解析

JVM 在Java应用程序优化中是不可缺少的一大重项&#xff0c;如何合理配置Java参数&#xff0c;如果验证配置参数的有效性&#xff0c;从GC日志中可以获得很重要的提示&#xff0c;以下是笔者对GC垃圾收集器默认开启的组合日志的部分的解析&#xff0c;希望能帮到想学习的同学O(…

MySQL 备份和恢复策略

在数据库表丢失或损坏的情况下&#xff0c;备份你的数据库是很重要的。如果发生系统崩溃&#xff0c;你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态。本文主要对MyISAM表做备份恢复。 备份策略一&#xff1a;直接拷贝数据库文件&#xff08;不推荐&#xff…

zookeeper学习记录

2019独角兽企业重金招聘Python工程师标准>>> 背景 前段时间看了S4流计算引擎&#xff0c;里面使用到了zookeeper进行集群管理&#xff0c;所以也就花了点时间研究了下zookeeper&#xff0c;不求看懂所有源码&#xff0c;但求了解其实现机制和原理&#xff0c;清楚其…

Ubuntu的apt-get使用国内的源

1、复制原文件备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 2、打开清华大学TUNA官网发布的Ubuntu 镜像使用帮助。 3、复制下面框中的内容&#xff0c;打开自己的Ubuntu系统。 4、 将框中的内容替换掉原来的所有内容 sudo gedit /etc/apt/sources.list 5、 进…

51单片机实现对24C02进行页写、顺序读取并显示验证

源&#xff1a;51单片机实现对24C02进行页写、顺序读取并显示验证 //************************************************************************************* //**程序名称&#xff1a;51单片机实现对24C02进行页写、顺序读取并显示验证 //**编写人&#xff1a;**** //**修…

配置MySQL主从复制

MySQL支持单向、异步复制&#xff0c;复制过程中一个服务器充当主服务器&#xff0c;而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件&#xff0c;并维护日志文件的一个索引以跟踪日志循环。当一个从服务器连接到主服务器时&#xff0c;它通知主服务器从…

PHP 单元测试

本文首发于 https://jaychen.cc/article/34作者 Jaychen朋友&#xff0c;你听说过安。。。不是&#xff0c;写过单元测试吗。 单元测试是开发过程中必不可少的一环&#xff0c;一个项目有良好的单元测试代码&#xff0c;重构的勇气都大很多。这次写一篇小文来介绍一下 PHP 的单…