哈希算法(Hash function)又称散列算法,是一种从任何数据(文件、字符等)中创建小的数字“指纹”的方法。哈希算法只需满足把一个散列对象映射到另一个区间的需求,因此根据使用场景的不同,可将哈希算法分为加密哈希与非加密哈希。
概述
加密哈希被认为是单向函数,也就是说极难由散列函数输出的结果,回推输入的数据是什么。加密哈希函数的输入数据,通常被称为消息(message),而它的输出结果通常被称为摘要(digest)。一个理想的密码散列函数通常具有以下三个特性:
单向性:极难由一个已知的散列数值,推算出原始的消息;
唯一性:在不改动散列数值的前提下,修改消息内容是不可行的;
抗碰撞性:对于两个不同的消息,它不能给与相同的散列数值。

其中不可碰撞性是指以当前的算法与算力水平,哈希碰撞的开销超出人类可以接受的水平。以SHA-256为例,其哈希数值可能性约有1077种,而目前人类估计的宇宙原子总数约1080。虽然有概率论生日悖论问题存在,N位长度的哈希表可能发生碰撞测试次数不是2N次而是只有2N/2次,但仍然是一个巨大的数字。
常见的加密哈希函数有MD5、SHA-1、SHA-2(包含SHA-224、SHA-256、SHA-512等),虽然种类繁多,但除了生成摘要的长度、循环体内容等有一些差异外,算法的基本结构是一致的。下面以SHA-256为例,详细介绍加密哈希算法的执行步骤。
SHA-256实现原理
常量初始化
SHA-256算法中用到了8个哈希初值以及64个哈希常量,其中,8个哈希初值是对自然数前8个质数(2,3,5,7,11,13,17,19)的平方根的小数部分取前32 bit:
64个哈希常量是对自然数中前64个质数的立方根的小数部分取前32 bit,标记为k[t]:
附加长度值
SHA-256用一个64位的数据来表示原始消息的长度,而在信息处理的过程中给需要将消息分解成512bit大小的块,因此补位后的消息长度应该是512的整数倍。附加长度值分为两个步骤:
第一个bit位补1,然后都补0,直到长度满足对512取模后余数是448,如果长度已经满足对512取模后余数是448,需要填充512个bit;
附加长度为64bit的长度值。
为什么不可碰撞性对加密哈希算法如此重要?从SHA-256算法的实现步骤可以看出,加密哈希的逆向计算几乎是不可能的,暴力破解法的成本也太高,因此对加密哈希算法所谓的攻击实际是利用哈希碰撞为突破口进行数据伪造。以常见的保存用户密码为例,如果是明文存储,一旦发生数据泄露,那么所有的账户都会被盗用,因此常用下面一些方法进行Hash加密:
Hash加密:单纯对密码进行Hash加密无法保证密码的安全性,因为用户密码通常是短字符,无论采用哪种加密算法,都可以利用暴力破解或彩虹表攻击破解。
Hash加盐:在原消息上添加随机盐再进行哈希加密,并将盐与密码保存起来,以便下次登陆验证,添加随机盐增加了彩虹表破解的难度,促使攻击者放弃破解。但是如果对密码进行不安全的散列函数(MD5)计算,数据库泄露后,攻击者可以根据散列值找出碰撞的消息,不管这个消息是否与密码相同,都可以通过验证。
专用哈希函数加密:使用bcrypt等专门用来密码加密的哈希函数进行加密,这类函数通常运算时间较长,大大增加了攻击成本。
密码加密不单单是一个技术问题,对于攻击者来说,如果破解成本大于收益成本,即使攻破了加密的密码也是无意义的。而那些被证明可以产生散列碰撞的Hash函数,攻击它们的成本较低,随着算法的改进与硬件水平的提升,破解的成本也不断降低。从安全的角度考虑,应该及时更换不安全的哈希算法。
加密哈希的应用比较广泛,笔者详细地学习哈希算法的实现原理,也是为了更好地理解它们使用与被攻击的方式,而不仅仅是在编程中调一个函数库。在这之前以为密码学的知识比较晦涩难懂,实际上抛开中间的数学运算,整体的逻辑十分清晰,基本结构很容易理解。
审核编辑:符乾江
相关推荐
智能手机的设计者不断寻找使它们尽可能吸引目标受众的方法。这意味着探索新技术,包括使用纳米技术来防水智....
手托初梦 发表于 08-18 17:13
•
118次
阅读
数据泄露有一个共同的问题——过于信任,这需要重新考虑 VPN 访问、安全配置和数据加密。
发表于 08-18 15:49 •
5次
阅读
数据治理软件,有时也称为数据管理软件,是一套工具,可帮助组织管理和改进数据质量、法规遵从性、使用率、....
生产线数字孪生通过生产过程的数字化重构,在虚拟空间中实时呈现生产过程。数字孪生系统用于监控转账过程、....
本次分享将从监控和可观测性、eBPF安全可观测性分析、内核安全可观测性展望三个方面展开。
字符(char)设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性。....
FPGA之家 发表于 08-17 09:04
•
58次
阅读
动态截取固定长度数据语法,即+:和-:的使用,这两个叫什么符号呢?运算符吗?
FPGA之家 发表于 08-17 09:01
•
47次
阅读
视频伪造是 Deepfake 技术最为主要的代表,其制作假视频的技术也被称为人工智能换脸(AI fa....
发表于 08-16 11:04 •
68次
阅读
将交流电源线、电流线、测试线接到各自插座中。(注:在连接被试品时,应将回路电阻测试电流线接于测试电流....
发表于 08-16 10:41 •
33次
阅读
我们先来看看第一个做法,将所有数据加载到内存中进行解密,这个如果数据量小的话可以使用这个方式来做,这....
2022年8月,主题为“未来e来·飞越梦想”的第七届深圳国际无人机展览会暨第五届中国国际无人系统博览....
发表于 08-16 10:01 •
95次
阅读
近日,福布斯中国发布2022中国创新力企业50强,立讯精密成功入选。
立讯精密 发表于 08-16 09:38
•
124次
阅读
半导体行业十分有趣,同时也充满挑战。俗话说,“打江山难,守江山更难”,这句话形容半导体行业十分贴切。....
发表于 08-16 09:27 •
51次
阅读
一个包1400字节,那么一次性发送大量数据,就必须分成多个包。比如,一个10MB 的文件,需要发送7....
发表于 08-16 09:05 •
62次
阅读
通过47 个示例应用程序探索GoXam 的可能性。我们创建了许多常见的图表类型作为您的应用程序的起点....
在审计的同时,Ping32提供弹窗、短信、邮件等多种形式的文件外发告警通知,如:某员工在1分钟内用微....
“临床医学离不开真实世界的研究,而真实世界研究依赖高质量数据。我们正通过构建更为安全和高效的多方安全....
发表于 08-15 11:48 •
174次
阅读
matplotlib官方有一份短小精悍的小文档,今天分享的就是这个: 官网的左下角有 自带的绘图指南....
云深之无迹 发表于 08-15 10:23
•
113次
阅读
小样本 NER 需要从很少的实例和外部资源中获取有效信息。本文提出了一个自描述机制,可以通过使用全局....
目前,大多数FPGA芯片是基于 SRAM 的结构的, 而 SRAM 单元中的数据掉电就会丢失,因此系....
发表于 08-15 09:13 •
123次
阅读
审核编辑:彭静
寒武纪科技 发表于 08-14 15:31
•
290次
阅读
让城市更聪明一些、更智慧一些,是推动城市治理体系和治理能力现代化的必由之路。未来几年,南京计划成为常....
发表于 08-14 14:44 •
79次
阅读
近日,北京市经济和信息化局公布了第四批专精特新“小巨人”企业名单,触景无限科技(北京)有限公司荣膺最....
发表于 08-14 12:01 •
67次
阅读
电磁屏蔽是抑制辐射干扰的有效手段 ,是电磁兼容性技术中的一项重要内容.电子设备通常难以做到连续密封屏....
电子万花筒 发表于 08-14 11:08
•
131次
阅读
这篇文章作为基础知识点,总结C语言的基本数据类型有哪些,浮点数的精度,整数变量的空间范围,变量定义语....
不过该消息目前在印媒采访印度政府高级官员口中被否认,并表示当前印度政府没有限制中国手机品牌在印度市场....
电子发烧友网 发表于 08-14 09:54
•
130次
阅读
在这项工作中,我们使用一种新颖的风格特征表示学习方法来解决任意图像风格转移的挑战性问题。作为图像风格....
耐科装备本次拟公开发行股份不超过2050万股,募集4.12亿元资金,用于半导体封装装备新建项目以及W....
发表于 08-12 13:56 •
146次
阅读
现如今,数据中心、云计算、边缘计算早已不是简单的技术名词,各类新型应用与技术的不断涌现,正在渗透到生....
话说科技 发表于 08-12 13:20
•
104次
阅读
随着开源产品的越来越盛行,作为一个Linux运维工程师,能够清晰地鉴别异常机器是否已经被入侵了显得至....
污水管道网数据监管系统 智能污水管道网数据监管系统 AMT-MD400 一.产品概述 智能排水/污水....
简单回顾一下指针的概念 内存会划分以字节为单位的空间,每一个字节都有一个编号(地址/指针) 指针....
随着企业发展,企业仅仅布置一套系统的可能性越来越小。企业内部OA办公系统、CRM、ERP等全面开花也....
秒秒说数据 发表于 08-11 13:26
•
99次
阅读
Linux - 基础 IO 文件 IO 相关操作 stdin stdout stderr 系统文件 ....
发表于 08-11 11:55 •
68次
阅读
自2020年以来,企业和组织对安全AI和自动化技术的使用跃升了近五分之一; 关键性基础设施组织(包括....
IBM中国 发表于 08-11 10:29
•
218次
阅读
近日,基于昇腾AI,摩赛恩与华为携手推出质谱智能计算系统MoloSight,并正式加入昇腾万里伙伴计....
华为计算 发表于 08-11 09:49
•
313次
阅读
很多时候,我们会遇到这样的情况,上层与下层的goroutine需要同时取消,这样就涉及到了gorou....
NVM Express (NVMe) 是一种用于固态驱动器 (SSD) 的通信接口,它正在打破为旋转....
闷~~ 发表于 08-10 15:31
•
95次
阅读
数据孤岛一般是指,企业将不同的业务、部门之间的数据各自存储、定义,导致企业中的数据像一个个孤岛一样被....
秒秒说数据 发表于 08-10 14:16
•
60次
阅读
天气预报我们每天都会关注,我们可以根据未来的天气增减衣物、安排出行,每天的气温、风速风向、相对湿度、....
8月9日,以“共绘遥感创新应用新蓝图”为主题的智能遥感开源生态联盟第二次会议在武汉光谷成功举办。本次....
华为计算 发表于 08-10 09:51
•
672次
阅读
从基本结构上,双极性三极管(Bipolar Junction Transistor),无论是NPN还....
发表于 08-09 09:04 •
27次
阅读
近日,软件架构师、数据科学家、Kaggle 大师 Agnis Liukis 撰写了一篇文章,他在文中....
新机器视觉 发表于 08-08 16:56
•
751次
阅读
在社区互动上,虽然有一些受访者提到使用 PostgreSQL 邮件列表作为与核心团队和整个项目交互的....
最近重新认知了一下TCP和UDP的原理以及区别,做一个简单的总结。
发表于 08-08 14:34 •
61次
阅读
算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数....
发表于 08-08 11:57 •
63次
阅读
而用户名称、性别、等级、头像在用户服务中,积分在积分服务中,成长值在成长值服务中。为了汇总这些数据统....
趋势视图是一种动态显示对象。 如果HMI 设备支持,趋势视图可以持续显示实际的过程数据和记录中的过....
安防监控是智慧城市的重要组成部分。然而,在城市监控场景下,行人目标往往距离摄像头远,所占像素小,这为....
主控芯片:PICF18
通讯方式:8位并口
中断方式:状态最高位检测
USB初始化正常...
发表于 07-13 07:46 •
233次
阅读
换行怎么输入?
mCmdParam.ByteWrite.mByteBuffer[0] = '/';
mCmdParam.ByteWrite.mByteBuffer[1] = 'n';
mCm...
发表于 07-12 06:16 •
147次
阅读
Chek OK
USB work type:51
Set mode OK
INT = 0B
bus rest!
INT = 0B
bus rest!
INT = 0B
bus res...
发表于 07-08 06:33 •
206次
阅读
本文出自 ELT.ZIP 团队,ELT<=>Elite(精英),.ZIP为压缩格式,ELT.ZIP即压缩精英。
成员:
上海...
发表于 07-02 18:17 •
5763次
阅读
COCOFLY教程——疯壳·无人机·系列SPI(六轴传感器数据获取) &nb...
发表于 05-30 11:19 •
1889次
阅读
import http from '@ohos.net.http';
export function doList() {
const url
const httpRequ...
发表于 04-25 10:15 •
1316次
阅读
在调试CAN,接收数据都没什么问题,但是发送那一块,有的时候rt_device_write的返回值为0,就是没发出去,这个应该怎么解决这...
发表于 04-20 09:22 •
2861次
阅读
有时候需要FINSH把接收到的数据保存到本地文件中,有时候需要从本地文件中导入输入命令或数据,FINSH是否有这个功能 ?...
发表于 04-18 09:22 •
1506次
阅读
请问怎么将bh1750软件包2.0里的bh1750_read_light是光强的数据吗?(onenet_mqtt_upload_string("light", 这里应该是什么) < ...
发表于 04-06 09:35 •
1120次
阅读
int listContainerHeight = listContainer.getHeight();
通过这个方法获得的方法,返回的数据和实际数据不一样,
有类似...
发表于 03-23 10:19 •
823次
阅读
评论