Hashes

哈希函数是接受一些任意输入并返回固定长度值的函数。具体值取决于所使用的给定哈希算法,例如SHA-1(GIT在使用),SHA-256,或者是BLAKE2,但是给予一个输入使用哈希算法总是返回相同的输出。

例如:输入以下:

Hello world

使用SHA-1则会输出:

0x7B502C3A1F48C8609AE212CDFB639DEE39673F5E

然而相同的输入使用SHA-256将会输出以下:

0x64EC88CA00B268E5BA1A35678A1B5316D212F4F366B2477232534A8AECA37F3C

第二个哈希值长度要大于第一个,这是因为SHA-1创建一个160比特的哈希值,而SHA-256创建一个256比特的哈希值。同样,前置的0x只是一个指示符,告诉我们以下的哈希表示为基数16(或十六进制)的数字。

哈希可以用不同的基数表示(base2base16base32等)。 实际上,IPFS将此作为其内容标识符的一部分,并使用Multibase协议同时支持多种基本表示形式。

例如,”Hello World"的SHA-256哈希值使用base32表示为:

mtwirsqawjuoloq2gvtyug2tc3jbf5htm2zeo4rsknfiv3fdp46a

加密散列的特征

加密散列带有非常重要的特性:

  • 确定性-相同的输入消息总是返回相同的输出哈希。
  • 不相关-消息中的微小变化应生成完全不同的哈希。
  • 唯一性-从两条不同的消息生成相同的哈希是不可行的。
  • 单向性-从其哈希值猜测或计算输入消息是不可行的。

事实证明,这些功能还意味着我们可以使用加密哈希来识别任何数据:哈希对于我们从中计算出的数据是唯一的,并且它不会太长(哈希是固定长度的,因此SHA-256哈希是 1 GB的视频文件的大小仍然只有32个字节),因此通过网络发送它不会占用很多资源。

这对于像IPFS这样的分布式系统至关重要,在该系统中,我们希望能够从许多地方存储和检索数据。 运行IPFS的计算机可以询问与之连接的所有对等方,是否有一个带有特定哈希值的文件,如果其中一个具有特定的哈希值,则他们将整个文件发回。 没有短而独特的标识符(例如密码哈希),就不可能实现。 这项技术称为“内容寻址”-因为内容本身是用来形成地址的,而不是用于存储其所在计算机和磁盘位置的信息。

IPFS学习-哈希的更多相关文章

  1. IPFS学习-分布式哈希表DHT

    Distributed Hash Tables(DHT) 分布式哈希表是一个分布式的键值对存储结构.在IPFS网络中,每一个节点都维护一个DHT的子集.当节点接受到一个请求.该节点要么直接回复,要么通 ...

  2. IPFS学习-IPNS

    星际名称系统(IPNS)是一个创建个更新可变的链接到IPFS内容的系统,由于对象在IPFS中是内容寻址的,他们的内容变化将导致地址随之变化.对于多变的事物是有用的.但是很难获取某些内容的最新版本. 在 ...

  3. IPFS学习-DNS链接

    DNSLink 什么是DNS链接 DNS链接使用DNS TXT记录映射域名(如ipfs.io)到一个IPFS地址.因为你可以编辑自己的DNS记录,可以使他们总是指向最新版本的IPFS中的对象(如果修改 ...

  4. IPFS学习-内容标识符(CIDs)

    内容标识符(CIDs) 内容标识符也称为CID,是用于指向IPFS中材料的标签. 它不会指示内容的存储位置,但会根据内容本身形成一种地址. CID简短,无论其基础内容的大小如何. CID基于内容的加密 ...

  5. 跟Microsoft.AspNet.Identity学习哈希加盐法

    什么是哈希加盐法? 废话少说:对于MD5这种加密算法,同样的密码每次加密后得到的密文是一样的,所以黑客可以利用已知的密码库(彩虹库)对目标数据库密文进行对比进行攻击. 怎样解决:哈希加盐法,以下是网上 ...

  6. 【转】Redis学习---哈希结构内存模型剖析

    [原文]https://www.toutiao.com/i6594624365906625032/ 概述 在前文<Redis字符串类型内部编码剖析>之中已经剖析过 Redis最基本的 St ...

  7. 自己动手实现 HashMap(Python字典),彻底系统的学习哈希表(上篇)——不看血亏!!!

    HashMap(Python字典)设计原理与实现(上篇)--哈希表的原理 在此前的四篇长文当中我们已经实现了我们自己的ArrayList和LinkedList,并且分析了ArrayList和Linke ...

  8. 【Redis】命令学习笔记——哈希(hash)(15个超全字典版)

    本篇基于redis 4.0.11版本,学习哈希(hash)相关命令. hash 是一个string类型的field和value的映射表,特别适合用于存储对象. 序号 命令 描述 实例 返回 HSET ...

  9. 站在Web3.0 理解IPFS是什么

    尽管网络上,已经有不少文章讨论IPFS,不过真正讲明白IPFS想做什么的很少,文本尝试站在未来Web3.0的高度来看看IPFS究竟用来解决什么问题. DApp 的缺陷 对区块链有所了解的同学,知道区块 ...

随机推荐

  1. Python3 之 类属性与实例属性

    1.类属性与实例属性 类属性就相当与全局变量,实例对象共有的属性,实例对象的属性为实例对象自己私有. 类属性就是类对象(Tool)所拥有的属性,它被所有类对象的实例对象(实例方法)所共有,在内存中只存 ...

  2. Matlab生成Word--xdd

    摘自<MATLAB统计分析与应用:40个案例分析>(谢中华老师著)P452页function CreatWord %利用Matlab生成word filespec_user = [pwd ...

  3. day 23 面向对象中类的成员 和嵌套

    1.类的成员? 变量.方法.属性 class Foo: # 方法 def __init__(self,name): # 实例变量/字段 self.name = name # 方法 def func(s ...

  4. redis的主从复制,以及使用sentinel自动处理主机宕机问题,集群

    以下部分想看懂得有一定的redis基础,且步骤是连贯的,错一步都不行.redis运行多个实例,不懂得自行百度. 1. redis主从同步 原理: 从服务器向主服务器发送 SYNC 命令. 接到 SYN ...

  5. ASP.NET Core 中的 ObjectPool 对象重用(一)

    前言 对象池是一种设计模式,一个对象池包含一组已经初始化过且可以使用的对象,而可以在有需求时创建和销毁对象.池的对象可以从池中取得对象,对其进行操作处理,并在不需要时归还给池子而非直接销毁他,他是一种 ...

  6. 【日常错误】spring-boot配置文件读取不到

    最近在用spring-boot做项目时,遇到自定义的配置文件无法读取到的问题,通过在appcation.java类上定义@PropertySource(value = {"classpath ...

  7. C # socket 实例

    同步客户端存储示例 下面的示例程序创建连接到服务器的客户端.             客户端使用一个同步套接字生成,因此,客户端应用程序的执行挂起,直到服务器返回响应.  应用程序将字符串发送到服务器 ...

  8. 白话OAuth2用户认证及鉴权标准流程

    一.OAuth2需求场景 在说明OAuth2需求及使用场景之前,需要先介绍一下OAuth2授权流程中的各种角色: 资源拥有者(User) - 指应用的用户 认证服务器 (Authorization S ...

  9. mac install: /usr/bin/unrar: Operation not permitted

    按照教程mac下解压缩rar文件工具-rarosx(免费),在mac上安装rar,在执行命令 sudo install -c -o $USER unrar /bin 出现错误:install: /bi ...

  10. JSP + Session Cookie详解

    篇幅较大,对JSP进行了非常详细的讲解,并解释了Session和Cookie的实现原理 ,预计看完需要20分钟左右,慢慢享受吧 JSP概述 掌握了servlet后,就可以利用servlet来开发动态页 ...