一文读懂哈希函数

哈希 :哈希冲突、负载因子、哈希函数、哈希表、哈希桶 文章目录哈希哈希(散列)函数 哈希 哈希(散列)是一种数据结构,通过散列算法将元素值转换为散列值进行存储。使得元素存储的位置与元素本身建立起了映射关系,如果要查、改数据,就可以直接到对应的位置去,使得时间复杂度达到了 O(1)。 哈希(散列)函数 哈希函数就是建立起元素与其存储位置的映射关系。 对于哈希函数来说,必须具有以下特点; 哈希函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址时,其值域必须在0 到m-1之间 哈希函数计算出来的地址能均匀分布在整个空间中(防止产生密集的哈希冲突 阅读详情
AI摘要

本文介绍了哈希函数的基本概念,包括其定义、特性如碰撞阻力和单向性,并探讨了哈希函数在区块链技术中的应用,如哈希上链和梅克尔树等。

哈希函数

哈希函数(Hash):h=H(Data)

##定义
哈希函数H,将可变大小的数据Data作为输入,产生固定长度的h值。

密码学哈希函数,是一个数学函数。哈希函数本身拥有的特征:
1、输入任意性:函数的输入可以是任意大小的数据;
2、输出固定性:函数的输出是一个固定大小的数据;
3、能够进行有效计算:也就是说在一个合理的时间内,能够对输入数据进行运算得出输出。
对于区块链技术以及加密数字货币而言,要使得哈希函数达到密码安全,还需要要求其具有以下特性:

#####1、碰撞阻力

碰撞的概念:如果有两个不同的值X,Y,H(X)=H(Y)成立,则称哈希函数H产生了碰撞。而碰撞阻力是指无法找到两个不同的值X,Y使得H(X)=H(Y)。

由碰撞阻力的解释和哈希函数的特性,会很容易的得出产生碰撞是一个必然的现象。因为哈希函数的输入空间是任意大小的数据,而输出是固定大小的数据。这就意味着输入空间比输出空间大,因此碰撞是必然的。

例如,如果我们定义哈希函数的输出只有0和1两种结果,那么很显然碰撞是很容易发生的。

那么一个优良的哈希函数,应该是这样的:

  • 任意y,找x,使得H(x) = y,非常困难
  • 给定x1, 找x2, 使得H(x1) == H(x2), 非常困难
  • 找任意的x1, x2, 使得H(x1) == H(x2), 非常困难

例如,对于一个256位输出的哈希函数而言,最坏的情况是要进行2256+1次哈希运算,平均也要2128次哈希运算。这个量级,差不多是一台PC机算10^27年的时间。所以,我们可以认为这件事是具有碰撞阻力的。

正是因为有了碰撞阻力,所以才有了哈希上链的说法。所谓哈希上链是典型的存证场景:这个场景可以让我们将哈希输出作为信息摘要写进区块链的区块结构中。例如有某一份非常重要的文件,文件非常大,将文件本身写入区块链中并不可行,所有者A又希望该文件在后续的使用中安全可靠,不会有被篡改的风险。于是所有者A将该文件做一次哈希,并将哈希值写入区块链中。后续在使用的过程中,只需要对要使用的文件做一次哈希,并与在区块链中的哈希值进行对比即可。如果哈希值相同,则证明没有被篡改,如果哈希值不同,则证明被篡改过。

#####2、单向性(隐秘性)

单向性(隐秘性)是指,如果我们只知道哈希函数的输出h=H(X),没有可行的算法算出输入值X。

常见的哈希算法有:MD5,SHA1,SHA224,SHA256,SHA384,SHA512,SM3

SHA-256是一个主要被比特币世界采用的比较有效的哈希函数。

####哈希指针以及数据结构:

哈希指针是一种数据结构,是一个指向数据存储位置以及位置数据的哈希值指针。我们在学习C语言的时候知道一个普通的指针就是一个地址,能够指向数据存储的位置。但是哈希指针不但能够告诉你数据存储的位置,还能够告诉你这个位置的数据是否被篡改过。也就是可以明确某个时间戳下该数据的哈希值的指针。

通过哈希指针构建的链表,实际上就是区块链。

如下图所示:

普通链表结构:

普通链表结构

区块链结构:

区块链表结构

因此,区块链的一个典型应用就是“防篡改”。

梅克尔树(Merkle trees):使用哈希指针的二叉树,就是梅克尔树。在梅克尔树的结构中,所有的数据块都被两两分组,每两个数据块的哈希指针被存入这两个数据块的父节点中,两个父节点的哈希指针又被存入到他们的父节点中,以此类推,一直达到梅克树的根节点。

其结构如图所示:
梅克尔树

梅克尔树的特点——隶属证明

假设,需要证明某一个数据区块隶属于某一个梅克尔树,则只需要展示数据区块的信息,以及数据区块通向树根节点的区块信息即可验证。可以忽略树的其他部分。

如下图所示:如果我们要验证D3是否属于ROOT树,则只需要展示D3,N2,N5这几个节点的信息。
隶属关系

作者:BitTribeLab Todd

【BitTribeLab】BitTribe Lab是一个全球创新实验室(节点)网络,以建设去中心化未来信息基础设施和去中心化金融(Defi)新世界为愿景,邀请思想家、科幻小说爱好者、技术极客、开源软件开发者等等加盟。
【闪电网络北京研发小组】:是由BitTribeLab发起的,由北京地区专注于区块链以及闪电网络技术研究的爱好者组成的开放性社群,欢迎加入我们,讨论产品技术。
微信群秘小姐姐:dataozi1219

hash哈希函数(散列函数)、hash table 哈希表(散列表) 在哈希函数中,指纹就是对原始数据进行哈希计算后得到的一个简短、固定长度的数字值,它充当数据的唯一标识符。通过指纹,我们可以高效地查找、验证、比较数据。如今,散列算法也被用来加密存在数据库中的。 阅读详情

相关推荐

Java面试加分点!一文读懂HashMap底层实现与扩容机制

HashMap在扩容机制上也是独具匠心。扩容不仅影响性能,还会影响数据的分布和哈希碰撞,所以在容量和扩容机制设计上,HashMap非常讲究。默认大小和负载因子:HashMap的默认容量是16,负载因子是0.75。也就是说,当HashMap的填充度超过75%时,就会触发扩容操作,避免因为过多的哈希冲突而降低性能。扩容机制:扩容发生时,HashMap会将当前容量翻倍,并重新将所有元素重新哈希到新的数组中。容量始终是2的幂次方:HashMap的容量总是保持2的幂次方。

孤芳不自赏 1392

哈希(超详细版)

我们知道哈希是需要通过哈希函数,让元素存储的位置和它的关键码建立一一映射的关系,那么我们接下来会讲解几个常用的哈希函数。

2302_79795375的博客 4269

yolov11使用记录(训练自己的数据集)

本文介绍了如何安装和使用Ultralytics YOLOv11进行目标检测。首先,通过Anaconda创建并激活虚拟环境,安装必要的依赖库如PyTorch和Ultralytics。接着,从GitHub下载YOLOv11源码,并在PyCharm中配置环境。下载预训练的YOLOv11模型后,通过编写简单的Python脚本进行图片检测,验证环境配置的正确性。最后,文章提到可以基于此环境训练自定义模型。整个过程涵盖了从环境搭建到模型应用的完整流程,适合初学者快速上手YOLOv11。

IT菜鸟 7548

哈希函数学习笔记

哈希函数(Hash Function)是一公开函数,用于将任意长的消息M映射为较短的、固定长 度的一个值H(M),又称为散列函数、杂凑函数.我们称函数值H(M)为哈希值、杂凑值、杂凑码、 或消息摘要。杂凑值是消息中所有比特的函数,因此提供错误检测能力。消息中任何一个比特或者几个比特的改变都会造成杂凑值的改变。总结:密码学上安全的哈希函数H应该包含的性质:①对于任意的消息x,计算H(x)是容易的。②H是单向的③H是强抗碰撞的对于给定的哈希值h,试图找到满足H(x)=h的x。对于m位的哈希值,穷举的规模大约是2

qq_54223524的博客 9966

详细对比模型训练和模型精调

当我们进行模型精调(Fine-Tuning)和模型训练时,我们需要考虑到不同的步骤和目标。

pumpkin84514的博客 1852

Android7以上抓取https数据包-无需root

手机内装一个虚拟机,然后在虚拟机内运行我需要抓包的应用,该虚拟机内是不需要证书验证的。完美解决android7.0以上https无法抓包的问题。

qq_45764684的博客 1454

什么是哈希函数

什么是hash函数 哈希函数(Hash Function),也称为散列函数,给定一个输入x,它会算出相应的输出H(x)。哈希函数的主要特征是: 输入x可以是任意长度的字符串 输出结果即H(x)的长度是固定的 计算 H(x) 的过程是高效的(对于长度为 n 的字符串 x ,计算出 H(x) 的时间复杂度应为 O(n) ) 另外哈希函数一般还要求以下两种特点: 1、免碰撞:即不会出...

a13698709128的博客 7239

SNN系列|编码篇(2)时序编码

Tempotral Coding 选择编码方法是要根据编码对象以及模型如何处理编码信息进行选择,如下是一种时序信息的编码对比: Threshold-based encoding 又称为tempotral contrast,该方法可以用于编解码一段序列,当差值超过阈值时发放脉冲,阈值是根据编码的序列自适应变化的。 使用该编码方法时,实值序列最好是沿时间变化的,因为在根据差分决定是否发放脉冲后,脉冲的顺序与差分顺序有关。 Time-to-first spike coding 该编码方法将信息用神经元首次

Tianlong Lee的博客 1万+

一文读懂essentials哈希函数:FNV与Murmur3实现原理与应用场景

essentials是一个为Android和Java提供通用工具类和哈希函数的开源项目,其实现的FNV和Murmur3哈希算法在数据处理、缓存键生成等场景中发挥着重要作用。本文将深入解析这两类哈希函数的实现原理,通过直观的数据对比帮助开发者理解如何选择适合的哈希算法。 ## FNV哈希函数:简单高效的经典实现 FNV(Fowler-Noll-Vo)哈希函数以其简洁的设计和良好的分布特性而广泛应

gitblog_01118的博客 417

【电路设计】带阻滤波器实战:从理论到Twin-T陷波电路实现

本文详细介绍了带阻滤波器的原理与Twin-T陷波电路的实战应用,从基础概念到工程实现全面解析。通过具体案例展示如何设计高Q值滤波器,解决电源噪声等实际问题,并分享PCB布局和元件选型的实用技巧,助力工程师提升电路设计能力。

gg901的博客 1011

基于R语言的DICE模型实践技术应用;预测不同减排路径下的经济增长、碳排放量、气候变化程度以及社会福利变化

DICE模型是一个动态综合气候经济模型,由诺贝尔经济学奖得主William Nordhaus开发,用于评估气候变化对经济的影响以及不同减排政策的经济成本和效益。以下是一个关于DICE模型在气候变化影响评估中的实际应用案例,结合R语言代码进行讲解。

KY_chenzhao的博客 867

php 区块链算法_区块链词典 | 一文读懂哈希、哈希函数和哈希算法

聊到区块链的时候也少不了会听到“哈希”、“哈希函数”、“哈希算法”,是不是听得一头雾水?别急,这一讲我们来学习区分一下。什么是哈希值?哈希是英文“Hash”的音译,涵义为“散列”,这个定义理解起来很枯燥、也很深奥,简单来说,就是将长短不一的数值串经过哈希计算后生成固定长度的数值串,想象哈希计算是一个机器,在机器的输入端可以输入不管是5位还是50位长短的数值串,而在机器的输出端最终输出的都...

weixin_39612058的博客 443

深度学习实战87-高中数学自适应测试系统研究与应用研发,前后台页面设计

大家好,我是微学AI ,今天给大家介绍一下深度学习实战87-高中数学自适应测试系统研究与应用研发,前后台页面设计。高中数学自适应测试系统旨在通过精准评估学生能力,用最少的题目发现其薄弱环节,并提供定制化的学习计划,帮助学生快速提升成绩。同时,系统结合了AI大模型实现自动判卷、生成报告,减轻教师负担,并支持个性化作业布置,使教学更加高效。学生可以清晰了解自身学习状态,教师也能获得精准的学生画像,实现差异化教学。

微学AI的博客 444

一篇读懂哈希函数:原理、特性、应用与常见算法

哈希函数是将任意长度数据映射为固定长度值的函数,具有定长输出、单向性、雪崩效应、抗碰撞和高效计算五大特性。它广泛应用于数据校验、密码存储、哈希表、分布式系统和数字签名等领域。常见算法包括MD5(不安全)、SHA-1(废弃)和更安全的SHA-256/SHA-512。哈希碰撞虽必然存在,但好的哈希函数使其计算上不可行。作为计算机科学的基础组件,哈希函数在数据结构、安全体系和分布式系统中发挥着关键作用,为数据生成不可逆且唯一的"数字指纹"。

编程改变世界。想做一些改变世界的产品。感谢一键三连。 2422

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

你的密码安全吗?一文读懂彩虹表、加盐与慢哈希的攻防演进

本文系统梳理了密码安全存储技术的演进历程。从基础的哈希函数开始,到防御彩虹表攻击的关键技术"加盐",再到现代密码安全的终极哲学"慢哈希函数"。文章详细解析了彩虹表攻击的原理、加盐技术的防御机制,以及针对加盐后数据库的破解手段。最后提出了密码存储的最佳实践:使用现代慢哈希算法(如Argon2、bcrypt)、为每个密码加盐、配置合理计算成本,并强制用户使用高强度密码。这些措施共同构建了当代密码安全的防御体系,有效保护用户数据安全。

galaxy223的博客 1300

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

一文读懂HashMap

HashMap 是 Java 中非常重要的类,在面试中经常被提及。本文将通过介绍 HashMap 基本原理以及经典面试问题进行分析。

赵KK的博客 213

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【密码学】一文读懂MD5

一文读懂MD5 曾经沧海难为水,除却巫山不是云。-- 元稹 MD5简介 MD5消息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位的散列值(hash value),用于确保信息传输完整一致,MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计。 MD5实现步骤 这里根据rfc1321中的描述进行说明, 下文的描述中假设有一个b-bit的消息作为输入,即: m = m_0 m_1 ... m _{b

LittleQ的博客 1248

一文读懂哈希算法SHA256

SHA256算法

qq_51473302的博客 1万+

一文读懂:什么是区块链

今天写一个能够一文读懂区块链的文章,以后谁再问我区块链是什么东西,我就把这篇文章发给他。 区块链技术概念于 2008 年在中本聪关于比特币的白皮书中提出。区块链与比 特币有着密切的关系,区块链是比特币的技术支撑,保证加密货币系统的正常运行,比特币是区块链的应用实现,扩大了区块链的知名度并促进其发展。 一、区块链的结构 区块链可以理解为一串加密的,互相关联的链式数据块。每个数据块中包含了比特币交易信息,用于验证交易的合法性和有效性。 上图为区块链构成模型,一个区块包含区块头和区...

XYlittlework的博客 1510

一文读懂BloomFilter

# 前言 你在开发或者面试过程中,有没有遇到过**海量数据需要查重**,**缓存穿透**怎么避免等等这样的问题呢?下面这个东西超屌,好好了解下,面试过关斩将,凸显你的不一样。 Bloom Filter 概念 布隆过滤器(英语:Bloom Filter)是1970年由一个叫布隆的小伙子提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优...

wutengfei_java的博客 321

一文读懂:密钥-加密算法-数字证书相关概念

本文介绍了密钥、签名、摘要、验签、数字信封、数字证书与常见加密算法的概念。帮助大家清晰了解加密技术,防止混淆。

℡﹏余温*** 6122

一文读懂布隆过滤器:特性、应用与局限

布隆过滤器是一种概率型数据结构,核心为初始值全 0 的位数组,依靠多个哈希函数映射元素。添加元素时,根据哈希值将对应位数组位置置 1;查询时,若对应位全为 1 则元素可能存在,有 0 则不存在。其空间高效、查询快速,存储 10 亿整数所需空间远小于传统哈希表,时间复杂度固定。但存在误判,可调整参数控制。常用于缓存穿透处理、URL 去重、数据库查询优化。它不支持直接删除,误判率无法为 0 ,不过凭借优势仍在多领域广泛应用,可通过改进满足更多需求。

编程在手天下我有的博客 1211

区块链是什么?一文读懂70%区块链入门知识

点击上方蓝色字体,选择“设为星标”优质文章,及时送达原文地址:https://zhuanlan.zhihu.com/p/34966034区块链是比特币的底层技术,不等同于比特币。有人说比特币就是一场泡沫,甚至放话“比特币是传销”。区块链作为继互联网后的新一波技术浪潮,本身无罪,况且炒币只是区块链里最初级的玩法。读完这篇文章,我们就能弄懂大部分区块链基础知识,从而离保守和狭隘远一点。区块链是一个去中...

u010821757的博客 550

一文读懂如何安全地存储密码

使用适应性哈希算法存储密码是目前的最佳实践,这些算法专门为密码存储而设计,提供了盐值的自动管理和计算强度的调整能力,以此来抵御各种攻击手段。适应性哈希算法是针对密码存储做了特别设计的算法,设计时考虑了计算时间,可以调整计算复杂度,以适应硬件性能的提升,使得即使在计算能力增强的情况下,破解密码的难度也能保持在一个较高的水平。每种密码存储方法都有其优缺点,但最佳实践是使用适应性哈希算法,适应性哈希算法专门为密码存储而设计,提供了盐值的自动管理和计算强度的调整能力,以此来抵御各种攻击手段。这种方式最好不要使用。

路多辛的所思所想 2613

数字化那点事:一文读懂区块链的核心技术与应用

随着数字货币的崛起和金融科技的不断进步,区块链技术逐渐走入公众视野。它不仅是比特币等加密货币的基础技术,也是未来数字化时代的一项重要技术。区块链通过去中心化、透明、不可篡改的特性,为数据的管理和传递提供了一种全新的解决方案,颠覆了传统行业的数据处理方式。 本文将从区块链的基本概念开始,深入解析区块链的核心技术、工作原理、主要特点以及实际应用场景。通过这篇文章,您将对区块链的内涵、发展前景及其在各行各业中的应用有一个全面的了解。

fudaihb的博客 2653
上一篇: 深入剖析BIP39补充协议
下一篇: 一文读懂数字签名
BitTribeLab
博客等级 码龄8年 49粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值