当前位置: 首页 > news >正文

密码学基础:搞懂Hash函数SHA1、SHA-2、SHA3(1)

目录

1.消息摘要(Hash)

2.SHA-1

3.SHA-2

4.小结


1.消息摘要(Hash)

Hash函数是一种单向密码体制,把任意长度的输入经过变换得到一个固定长度的输出,同时它还具备单向性,只能从明文到密文,不能逆向,正是由于Hash函数的单向性和输出长度固定的特性,使得其广泛应用在数据完整性验证和数字签名等领域。

常见Hash函数基本采用迭代结构,接收输入消息M,将其拆分为n个固定长度分组,如果最后一个数据块不满足要求,则需进行填充;该算法重复使用压缩函数f,进行计算得到最终输出,如下图所示:

图 1 Hash函数过程

常见的函数包含SHA-1、SHA-2家族、SHA-3家族、MD5、SM3等。

2.SHA-1

SHA全称Secure HASH Algorithm,由NIST开发;SHA-1于1995年进行修订发布,要求输入最大长度2^64 -1位数据,输出固定160位消息摘要,处理过程按照512位数据块进行分组。

SHA1的IV设定方法为十六进制数(0-F),每两个数构成一个字节,其中A(32bit数)顺时针0-7,B顺时针8-F,C逆时针F-8,D逆时针7-0,E取C3\D2\E1\F0,因此固定为:

(0x67452301U), (0xEFCDAB89U), (0x98BADCFEU), (0x10325476U),(0xC3D2E1F0U)

不过,在2017年,研究人员成功实施了对SHA-1算法的碰撞攻击,找到了两个不同的消息,但具有相同的SHA-1散列值。这引发了对SHA-1安全性的担忧,因为碰撞攻击可能导致数字签名和其他安全机制的破坏,因此在应用中不建议使用该算法。

3.SHA-2

SHA-2是一系列Hash函数的统称,其中包括SHA-224\256\384\512等,区别主要在于函数内部结果和生成的摘要值长度,SHA-512还有另外变体为SHA512_224、SHA512_256,主要是基于SHA512产生的摘要值进行截断,与SHA512区别在于IV和输出长度不一致。

其中,SHA-224\256分组大小为512位,SHA-384, SHA-512, SHA-512/224和SHA-512/256分组大小为1024bit。

SHA-224生成224位消息摘要,初始IV为:

   (0xC1059ED8U),(0x367CD507U),(0x3070DD17U),(0xF70E5939U),

   (0xFFC00B31U),(0x68581511U),(0x64F98FA7U),(0xBEFA4FA4U)

SHA-256生成256位消息摘要,初始IV(取自然界前8个素数平方根小数部分前32位)为:

    (0x6A09E667U),(0xBB67AE85U),(0x3C6EF372U),(0xA54FF53AU),

(0x510E527FU),(0x9B05688CU),(0x1F83D9ABU),(0x5BE0CD19U)

SHA384生成384位消息摘要,初始IV为:

(0xCBBB9D5DC1059ED8),(0x629A292A367CD507),

(0x9159015A3070DD17), (0x152FECD8F70E5939),

(0x67332667FFC00B31), (0x8EB44A8768581511),

(0xDB0C2E0D64F98FA7), (0x47B5481DBEFA4FA4)

4.小结

这里我们先就将基础的SHA1\2讲解了,接下来我们继续聊SHA-3、SHA2变体SHA512_224\256等。 

相关文章:

  • Golang | Leetcode Golang题解之第328题奇偶链表
  • 汽车测试,引领国际
  • [24年新算法]NRBO-XGBoost回归+交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测
  • C语言实现游戏2048(超详细!!!超易懂!!!)
  • 中职云计算实训室
  • 《密码编码学与网络安全原理与实践》第三章 传统加密技术
  • Tomcat启动控制台乱码解决方案
  • 【Pytorch实用教程】nn.Conv2d的详细介绍
  • 【漏洞复现】maxView Storage Manager 远程代码执行漏洞
  • 51单片机—智能垃圾桶(定时器)
  • Linux磁盘管理_文件系统
  • MySQL1 DDL数据定义语言
  • Linux 安装指南
  • 驰骋BPM RunSQL_Init接口SQL注入漏洞复现 [附POC]
  • ArcGIS基础:自定义创建点线面等样式符号以方便使用
  • ----------
  • #Java异常处理
  • 2017届校招提前批面试回顾
  • 2017年终总结、随想
  • Bytom交易说明(账户管理模式)
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Cumulo 的 ClojureScript 模块已经成型
  • Java|序列化异常StreamCorruptedException的解决方法
  • Javascript Math对象和Date对象常用方法详解
  • java正则表式的使用
  • leetcode-27. Remove Element
  • Puppeteer:浏览器控制器
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 学习笔记:对象,原型和继承(1)
  • 主流的CSS水平和垂直居中技术大全
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • postgresql行列转换函数
  • 阿里云服务器购买完整流程
  • 数据可视化之下发图实践
  • #数据结构 笔记一
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (3)(3.5) 遥测无线电区域条例
  • (java)关于Thread的挂起和恢复
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (翻译)terry crowley: 写给程序员
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (六)Flink 窗口计算
  • (区间dp) (经典例题) 石子合并
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (四)鸿鹄云架构一服务注册中心
  • (五)Python 垃圾回收机制
  • (一) springboot详细介绍
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)程序员技术练级攻略
  • .net core 依赖注入的基本用发
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料