HASH函数

2023-10-27

散列函数代表除了对称和非对称加密之外的第三种加密类型,我们可以称之为无密钥加密。hash函数就是把任意长的输入位(或字节)变化成固定长的输出字符串的一种函数。输出字符串的长度称为hash函数的位数。

哈希不能用于发现原始消息的内容或其任何其他特征,但可用于确定消息是否已更改。几乎所有使用的散列函数都是迭代散列函数,“理想的散列函数是从所有可能的输入值得到所可能的有限输出值几何的一个随机映射。”

较好的散列函数例如:SHA-1,SHA-224,SHA-256和SHA-512。

哈希函数指将哈希表中元素的关键键值映射为元素存储位置的函数。散列提供机密性,但不提供完整性。

给定一个消息m,将任意长度的消息m,映射为固定长度的h(m),h(m)的长度一般为128位到1024位。

hash函数为单向函数,给定消息m可以很容易计算h(m),但对于给定的x,不能求出满足x=h(m)的m。

https://tse1-mm.cn.bing.net/th/id/R-C.f7b2b7fa8c73124dfb11a0a9df2401a4?rik=HUYDTW%2bSWKyHiw&pid=ImgRaw&r=0

一对碰撞指:给定两个不一样的消息m1和m2,使得h(m1)=h(m2)。

HASH函数具有抗碰撞性,虽然会遇到碰撞,但是遇到的几率非常小。

0x01 散列

散列一般指Hash,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值,这是一种压缩映射。

散列是通过计算哈希值,打乱元素之间原有的关系,使集合中的元素可以按照散列函数进行排列。

根据Wikipedia我们了解到,一个好的散列函数满足两个基本属性:

  1. 计算速度非常高效

通常对于任何带有输入 x 的散列函数 h,h(x) 的计算是一个快速运算

  1. 尽量减少输出值的重复,均匀分布键

哈希函数将任意长度的数据转换为固定长度。这个过程通常被称为散列数据。

散列比输入数据小得多,因此散列函数有时被称为压缩函数。

由于散列是较大数据的较小表示,因此也称为摘要。

哈希函数功能包括:

  1. 将可变长度键转换为固定长度(通常是机器字长或更短)的值,方法是使用 ADD 或 XOR 等保持奇偶校验的运算符按字或其他单位折叠它们。
  2. 对密钥的位进行加扰,以使结果值均匀分布在密钥空间中。
  3. 将键值映射为小于或等于表大小的键值

0x02 哈希表


哈希表(Hash table,也叫散列表),哈希表中元素是由哈希函数确定,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

0x03 hash函数构造方法

直接定址法

取关键字或关键字的某个线性函数值为哈希地址。

H(key) = key
H(key) = a·key + b

由于直接定址所得地址集合和关键字集合的大小相同,对于不同的关键字不会发生冲突。但适合査找表较小且连续的情况,在现实应用中,直接定址法虽然简单,但并不太常用。

缺点是,要占用连续地址空间,空间效率低。

乘取整法

首先用关键字key乘上某个常数A(0 < A < 1),并抽取出key.A的小数部分;然后用m乘以该小数后取整。

该方法最大的优点是m的选取比除余法要求更低。比如,完全可选择它是2的整数次幂。虽然该方法对任何A的值都适用,但对某些值效果会更好。

平方取中法

取关键字平方后的中间几位为哈希地址。

通过平方扩大差别,另外中间几位与乘数的每一位相关,由此产生的散列地址较为均匀。这是一种较常用的构造哈希函数的方法。


 

除留余数法

取关键字被数p除后所得余数为哈希地址

H(key) = key MOD p (p ≤ m)

这是一种最简单,也最常用的构造哈希函数的方法,它不仅可以对关键字直接取模(MOD),也可在折迭、平方取中等运算之后取模。在使用除留余数法时,对p的选择很重要。表长为m,p为小于等于p的质数。

随机数法

选择一个随机函数,取关键字的随机函数值为它的哈希地址。

H(key) = random (key)

其中random为随机函数,当关键字长度不等时采用此法构造哈希函数较恰当。

0x04 哈希函数的应用


加密散列函数广泛用于加密货币中以匿名传递交易信息。例如比特币,最原始和最大的加密货币,在其算法中使用了 SHA-256 加密哈希函数。同样,物联网平台 IOTA也有自己的加密哈希函数,称为 Curl。

哈希函数基于其加密属性有两种直接应用。

密码存储


将密码存储在常规文本文件中很危险,因此几乎所有站点都将密码存储为哈希值。

大多数登录进程不是以明文形式存储密码,而是将密码的哈希值存储在文件中。
当用户输入他们的密码时,会对其进行哈希处理,并将结果与存储在公司服务器上的哈希值列表进行比较。

入侵者只能看到密码的哈希值,即使他访问了密码。他既不能使用哈希登录,也不能从哈希值中导出密码,因为哈希函数具有抗原像的特性。

密码文件由格式为 (user_id, h(P)) 的对表组成。

https://www.tutorialspoint.com/cryptography/images/process_of_logon.jpg

数据完整性检查


数据完整性检查是散列函数最常见的应用之一。验证签名是用于验证数字文档或消息的真实性的过程。它用于生成数据文件的校验和,向用户提供有关数据正确性的保证。

满足先决条件的有效数字签名向其接收者提供强有力的证据,证明消息是由已知的发送者创建的,并且消息在传输过程中没有被更改。

https://www.tutorialspoint.com/cryptography/images/data_integrity_check.jpg

0x05 MD5

MD 系列包括散列函数 MD2、MD4、MD5 和 MD6。

MD5消息摘要算法是一种广泛使用的散列函数,可产生128位散列值。尽管 MD5 最初设计为用作加密哈希函数,但已发现它存在大量漏洞。它仍然可以用作校验和来验证数据完整性。

https://tse3-mm.cn.bing.net/th/id/OIP-C.HC6lMvMsKUVz2dP3pA2QYgHaCm?pid=ImgDet&rs=1

MD5 由Ronald Rivest于 1991 年设计,以取代早期的散列函数MD4,在MD4的基础上强化了抗攻击能力,并于 1992 年被指定为 RFC 1321。

任何加密散列函数的一个基本要求是,要找到两个散列到相同值的不同消息在计算上应该是不可行的。但目前MD5的这种碰撞可以在普通计算机上几秒钟内找到。

MD5的安全性

MD5 哈希函数的安全性具有严重问题。

MD5 存在碰撞攻击,可以在几秒钟内在具有 2.6 GHz Pentium 4 处理器的计算机上找到碰撞。此外,还有一种选择前缀冲突攻击,使用现成的计算硬件可以在几秒钟内对具有指定前缀的两个输入产生冲突。截至 2019 年,四分之一广泛使用的内容管理系统仍在使用 MD5 进行密码散列。

MD5的应用

MD5 消息摘要算法已在软件中广泛使用,以确保传输的文件已完好无损。例如,文件服务器通常会为文件提供预先计算的 MD5校验和,以便用户可以将下载文件的校验和与其进行比较。

大多数基于 unix 的操作系统在其分发包中包含 MD5 sum 实用程序;Windows 用户可以使用包含的PowerShell函数“Get-FileHash”,安装 Microsoft 实用程序或使用第三方应用程序。Android ROM 也使用这种类型的校验和。

https://en.wikipedia.org/wiki/File:CPT-Hashing-File-Transmission.svg

0x06 安全散列函数 (SHA)

最初的版本是 SHA-0,一个 160 位的散列函数,由美国国家标准与技术研究院 (NIST) 于 1993 年发布。缺点很少但没有变得很流行。1995 年晚些时候,SHA-1 旨在纠正所谓的 SHA-0 的缺点。

SHA-1 是现有 SHA 哈希函数中使用最广泛的一种。它用于多种广泛使用的应用程序和协议,包括安全套接字层 (SSL) 安全性。

2005 年,发现了一种在实际时间框架内发现 SHA-1 冲突的方法,这使得 SHA-1 长期受到质疑。

SHA-2 系列还有四个 SHA 变体,SHA-224、SHA-256、SHA-384 和 SHA-512,具体取决于其哈希值中的位数。虽然 SHA-2 是一个强大的哈希函数。虽然明显不同,但其基本设计仍然遵循 SHA-1 的设计。

2012 年 10 月,NIST 选择 Keccak 算法作为新的 SHA-3 标准。Keccak 提供了许多好处,例如高效的性能和良好的攻击抵抗力。

0x07 区块链中使用哈希

哈希用于反映区块链的实际状态,以保证区块链的不变性。

每笔交易包括发件人地址、收件人地址、数量时间戳等信息,该数据组合并进入散列函数,该函数产生一个特殊的散列值,称为支付散列或交易 ID。此哈希用于验证是否发生了某个交易,而不是在区块链上,并且可以验证。

区块链的第一个区块被视为区块头,它包含交易信息。通过添加所有交易生成一个新的哈希,每当生成第二个块时,此组合用于生成新块中所有付款的新匹配哈希,以合并块头的哈希。将所有块连接到行后,重复此步骤。并且使用先前的哈希产生新的哈希会产生依赖性。因为如果有人试图更改特定的数据,他们必须修改当前时刻之前的所有数据,这使得一个稳定和永久的区块链。

不同的区块链使用各种散列函数,例如比特币区块链,它使用 SHA-256 散列函数来保护信息。

参考文章:

Cryptography Hash functions

小白入门——哈希算法 - 简书

散列函数(哈希)_askunix_hjh的博客-CSDN博客_散列函数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HASH函数 的相关文章

  • CTF加密解密—CRYPTO—密码学签到

    0x00 考察知识点 考虑字符串倒序的问题 0x01 题目 密文是 wohs ftc galf 0x02 Write Up 直接进行字符串倒序即可 签到题 简单点是肯定的啦
  • 区块链学术会议/研究团队汇总

    欢迎评论补充 共建区块链学术生态 一 常见区块链文章发布会议 期刊 领域 简称 全称 CCF Level 备注 网络与信息安全 USENIX Security CCF A TIFS CCF A S P CCF A CCS CCF A Jou
  • 【BingGPT对话记录】基于格的密码学简介

    格密码学是一种基于格 lattice 的数学结构的密码学分支 它具有抵抗量子计算攻击的特性 格是一个由线性无关向量生成的离散点集 可以用来描述许多复杂的几何和代数问题 格密码学的安全性通常建立在最坏情况下的难度假设上 即即使给定最优化算法
  • DES 数据加密标准 结构详解

    DES Data Encryption Standard 又称数据加密标准 是一种对称加密算法 也是密码学摆脱古典流加密后最简单的一种块加密算法 由于香农与1949年提出 完善保密性 该标准要求密钥长度不短于明文长度 实际操作难以达到 因此
  • 【区块链与密码学】第6-9讲:数字签名算法的可证明安全性

    本课堂内容全部选编自PlatON首席密码学家 武汉大学国家网络安全学院教授 博士生导师何德彪教授的 区块链与密码学 授课讲义 教材及互联网 版权归属其原作者所有 如有侵权请立即与我们联系 我们将及时处理 6 9数字签名算法的可证明安全性 可
  • 密码学的一些基本概念

    密码学是研究如何隐密地传递信息的学科 密码学的作用 机密性 是网络信息不泄露给非授权用户的特性 防止被动攻击 常用的保密技术包括 防侦听 防辐射 信息加密 物理保密等 完整性 完整性是网络信息未经授权不能进行改变的特性 完整性是一种面向信息
  • 北大肖臻老师<<区块链技术>>笔记1

    课程的大纲 密码学基础 比特币的数据结构 共识协议和系统实现 挖矿算法和难度调整 比特币的脚本 软分叉和硬分叉 匿名和隐私保护 以太坊是后面的 首先是密码学基础的学习 crypto currency 虚拟货币 是不加密的 区块链上所有的教以
  • AES加密算法详解(图文解释)

    由于DES加密算法被破解了 3DES加密算法虽然没有被破解 但是3DES算法的加解密效率低 所有现在都使用AES算法 AES加密算法是密码学中的高级加密标准 AES为分组加密法 把明文分成一组一组的 每组长度相等 每次加密一组数据 直到加密
  • Hash 函数及其重要性

    不时会爆出网站的服务器和数据库被盗取 考虑到这点 就要确保用户一些敏感数据 例如密码 的安全性 今天 我们要学的是 hash 背后的基础知识 以及如何用它来保护你的 web 应用的密码 申明 密码学是非常复杂的一门学科 我不是这方面的专家
  • BUUCTF Crypto(密码学)刷题

    MD5 拿到一串字符串e00cf25ad42683b3df678c61f42c6bda 根据题目可到在线MD5在线解密 拿到flag Url编码 根据提示可知是url编码 url编码在线解密 一眼就解密 的确 一眼就解密了 非常明显的bes
  • 【0325】分组密码

    分组密码 体制概述 分组密码体制 Block cipher 是在密钥k控制下一次变换一个明文数据块 又称分组 的密码体制 特点 速度快 易于标准化和便于软硬件实现等特点 设计原则和评估 针对安全性的两个基本原则 扩散和混淆 对抗统计分析 扩
  • 【总结一】现代密码学

    目录 1 密码学概述 1 1 密码学的基本概念 1 1 1 为什么要学密码学 1 1 2 什么是密码学 1 1 2 密码算法的基本模型 1 1 3 密码算法的分类 1 2 密码分析学 1 3 古典密码算法 1 3 1 置换密码 1 3 2
  • 人民日报:密码,让百姓生活更安全

    密码技术是保障网络与信息安全的核心技术和基础支撑 通过加密保护和安全认证两大核心功能 可以完整实现防假冒 防泄密 防篡改 抗抵赖等安全需求 在网络空间中扮演着 信使 卫士 和 基因 的重要角色 信息化 网络化 数字化高度发达的今天 密码技术
  • 密码学原语如何应用?解析单向哈希的妙用|第9论

    作者 廖飞强 来源 微众银行区块链 隐私数据如何验明真伪 区块链数据何以可信 如何快速检验海量数据是否被篡改 单向哈希在其中起到了什么作用 隐私数据的价值很大程度上源自其真实性 如何防止数据被恶意篡改 是隐私保护方案设计中不可忽视的关键目标
  • 27、HMAC

    HMAC产生背景 HMAC为什么会被提出来 是MAC的产生有什么缺陷么 HMAC规范的设计是由于存在对将密钥与hash函数相结合的更简单机制的攻击 换言之就是有些将密钥和hash函数结合使用产生MAC的算法容易被攻击 而这种生成消息认证码的
  • 【Python】cryptography和pycryptodome库使用

    题目 1 使用cryptography模块 编写完整的AES CBC加解密函数 函数接口为 def encrypt CBC key plaintext iv def decrypt CBC key ciphertext iv 2 使用pyc
  • 区块链Blockchain

    区块链Blockchain 区块链是分布式数据存储 点对点传输 共识机制 加密算法等计算机技术的新型应用模式 所谓共识机制是区块链系统中实现不同节点之间建立信任 获取权益的数学算法 狭义来讲 区块链是一种按照时间顺序将数据区块以顺序相连的方
  • CTF入门学习笔记——Crypto密码(古典密码)

    文章目录 CTF入门学习笔记 Crypto密码 古典密码 凯撒密码 看我回旋踢 摩斯密码 摩斯 维吉尼亚密码 Vigen re 栅栏密码 篱笆墙的影子 栅栏密码 篱笆墙的影子 猪圈密码 待补充 CTF入门学习笔记 Crypto密码 古典密码
  • 【区块链与密码学】第6-7讲:SM9数字签名算法

    本课堂内容全部选编自PlatON首席密码学家 武汉大学国家网络安全学院教授 博士生导师何德彪教授的 区块链与密码学 授课讲义 教材及互联网 版权归属其原作者所有 如有侵权请立即与我们联系 我们将及时处理 6 7 SM9数字签名算法 为了降低
  • 密码学原语如何应用?解析密文同态性的妙用

    隐私数据在密文形式下是否依旧可以加减乘除 其背后的同态性原理具体指什么 半同态性和全同态性有什么区别 单密钥和多密钥同态加密有哪些奇妙的应用场景 隐私保护方案设计 往往需要在密文状态下 对隐私数据进行特定的业务操作 以此保障数据的机密性 沿

随机推荐

  • 蛇形矩阵(完全)

    画 n阶蛇形方阵 比如如图是5阶方阵 5条对角线 1 2 6 7 15 3 5 8 14 16 4 9 13 17 22 10 12 18 21 23 11 19 20 24 25 解题思路 1 分为上三角和下三角 上三角的思路是同蛇形矩阵
  • 训练自己的ai模型(一)学习笔记与项目实操

    ai模型大火 作为普通人 我也想做个自己的ai模型 训练自己的ai模型通常需要接下来的的六步 一 收集和准备数据集 需要收集和准备一个数据集 其中包含想要训练模型的数据 这可能需要一些数据清理和预处理 以确保数据集的质量和一致性 二 选择和
  • clash设置代理后内网访问慢及访问不到问题

    配置忽略代理的ip及域名即可 在 config clash文件夹下新建 proxyIgnoreList plist文件 如果不知道 config clash在哪的 可以通过打开本地文件夹来定位 然后在新创建的文件内写入要忽略代理的域名及ip
  • 链表与节点

    链表 java中通过 node next 表示 node的下一个节点 同理 node next next 表示 node后的第二个节点 通过链表这种数据结构 可以实现许多奇妙的组合 这里我通过接口的方式 把重要的方法进行了封装 虽然只有三个
  • 逆流而上——泛谈对二进制可执行程序的静态反编译

    欢迎对本blog相关主题感兴趣的团体或单位转载相关文章 但转载时请注明出处 谢谢 一 概述 首先应该声明的是 这里讨论的反编译是针对二进制可执行程序进行的静态反向编译操作 虽然对于类似Java Bytecode和MSIL的虚拟机中间代码的反
  • 【layui】 灵活使用弹出层iframe 让你的父界面代码更加清晰

    第一次使用layui框架时候 layer open 使用了最最累赘的 静态布局div 在写入content中不但让你的代码逻辑很乱 而且不利于开发 所以整理一款 弹出层js 是在开发中必不可少的 在此感谢 X admin2 0 提供的源码
  • python实现次梯度(subgradient)和近端梯度下降法 (proximal gradient descent)方法求解L1正则化

    l1范数最小化 考虑函数 显然其在零点不可微 其对应的的次微分为 注意 的取值为一个区间 两个重要定理 1 一个凸函数 当且仅当 为全局最小值 即 为最小值点 2 为函数 不一定是凸函数 的最小值点 当且仅当在该点可次微分且 考虑最简单的一
  • scrapy爬取王者官网壁纸

    1 安装scrapy pip install scrapy pip install Pillow 2 创建项目 scrapy startproject wangzhe cd wangzhe scrapy genspider wz xxx 3
  • 蓝牙定位技术原理--蓝牙人员定位--蓝牙定位--新导智能

    众所周知 蓝牙通讯技能被广泛用于手的机 智能家居 智能穿戴等通讯中 随着物联网生态链逐渐走向成熟 对定位的需求也大大增加 这给蓝牙在该范畴又发明了一番宽广的六合 接下来首要剖析一下蓝牙定位技能的作业原理与首要使用场景 一 蓝牙人员定位原理
  • K8S master高可用,多master节点 (keepalived + haproxy)案例

    说明 Apiserver是用户和 kubernetes 集群交互的入口 封装了核心对象的增删改查操作 提供了 RESTFul 风格的 API 接口 通过etcd来实现持久化并维护对象的一致性 所以在整个K8S集群中 Apiserver服务至
  • Python实战项目(一)网页虚拟访问程序

    作者 尘世镜花恋 声明 本文章纯属个人学习所作 切勿用于非法渠道 转载请注明原文链接 有一些网站 对于本机用户自身的访问也计入访问量内 所以我们可以利用这一点利用自己的电脑提高自己网页的访问量 这里仅介绍用本机ip访问 首先导入reques
  • 小白_Unity引擎_详细Camera以及代码设置

    Cemera摄像机 Unity主要核心组件之一 显示场景中 摄像机照射部分 是向玩家捕获和显示世界的设备 1 ClearFlags 清除标记 显示背景内容 默认为天空盒子 代码设置 m Camera GetComponent
  • PHP的AES加密,模式为“AES/CBC/PKCS5Padding“,含解密

    加密需要php5版本 php7方法已弃用 AES加密请求数据 加密通过AES加密请求数据 param array query return string public function enAES key input size mcrypt
  • 宝塔误删mysql数据如何恢复?(救命题)

    前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住分享一下给大家 点击跳转到网站 mysql二进制日志恢复 有很多朋友私信求帮助恢复数据库 可以加微信备注添加原因 如果能帮助解决问题 给点辛苦费就行 有一个朋友 在工作中 复
  • linux系统使用HTTP代理方法

    在Linux系统中使用HTTP代理方法 可以通过设置环境变量来实现 具体步骤如下 1 打开终端 输入以下命令 export http proxy http 代理服务器IP地址 端口号 其中 代理服务器IP地址和端口号需要替换成你所使用的代理
  • Redis——(3)redis三种启动方式以及其中的使用区别

    目录 1 直接启动 redis server 进入到redis的src文件下 2 通过指定配置文件启动 3 使用redis启动脚本设置开机自启动 4 ssh的安装过程 1 直接启动 redis server 进入到redis的src文件下
  • oracle job的创建和删除

    oracle job的创建 declare v jobnum number begin dbms job submit v jobnum lastjob sysdate last day sysdate 1 COMMIT end 或者 DE
  • Java—内部类

    It s possible to please a class definition within another class definition 内部类即定义在另一个类的内部的类 When you create an inner cla
  • CSS - 纯css实现多行文本溢出省略(兼容所有浏览器)

    这个方式参考了使用了网上流传的方式来解决 是我目前已知的chuncss的最好解决方案 我把网上的又增加了文字两端对齐和 右侧padding 让 更加紧贴文字 对文字形影不离 div class mutil line ellipsis div
  • HASH函数

    散列函数代表除了对称和非对称加密之外的第三种加密类型 我们可以称之为无密钥加密 hash函数就是把任意长的输入位 或字节 变化成固定长的输出字符串的一种函数 输出字符串的长度称为hash函数的位数 哈希不能用于发现原始消息的内容或其任何其他