摘要/哈希/散列算法MD5 SHA1 SHA256 SHA512的区别和MAC算法

news2024/11/19 10:34:04

 一、摘要算法大致都要经过以下步骤

1. 明文数据预处理

1.1 填充比特

MD5、SHA1、SHA256  的分组长度都是512bit   需要填充比特使其位长对512求余的结果等于448

SHA512                          的分组长度是  1024bit   需要填充比特使其对1024求余的结果等于896


相同:

填充内容都是:先填充一个1,后面跟对应个数的0

刚好512求余的结果等于448时也要附加一个分组

以MD5例:

 61 62 63 64 31 32 33 34     >>>        61 62 63 64 31 32 33 34 80 00 00  ... 00 00

1.2 附加消息长度

不同:

MD5                           附加消息长度(64bit表示)     转小端字节序

SHA1、SHA256        附加消息长度(64bit表示)     无需转小端字节序  

SHA512                     附加消息长度(128bit表示)   无需转小端字节序


相同:

如果内容过长,64/128bit个比特放不下。就取低64/128bi

以MD5例:

00 00 00 00 00 00 00 40    转小端字节序   40 00 00 00 00 00 00 00

61 62 63 64 31 32 33 34 80 00 00  ... 00 00 附加消息长度
61 62 63 64 31 32 33 34 80 00 00  ... 00 00 40 00 00 00 00 00 00 00

2. 摘要计算

2.1 常量初始化

MD5                           4个64bit初始化常量           64个K   

SHA1                         5个64bit初始化常量           4个K   

SHA256                     8个64bit初始化常量           80个K          

SHA512                     8个128bit初始化常量         80个K      



2.2 分组及分组拓展和分组分段

MD5、SHA1、SHA256  的分组长度都是512bit    SHA512的分组长度是  1024bit   

MD5           512bit分为16段每段32bit     无需拓展                                  改成小端字节序

SHA1         512bit分为16段每段32bit     加上了扩展出来的64段,共80段         不用改    

SHA256     512bit分为16段每段32bit     加上了扩展出来的64段,共80段         不用改 

SHA512    1024bit分为16段每段64bit    加上了扩展出来的64段,共80段         不用改 


SHA1 分组拓展

SHA1与SHA0的区别就是在扩展这64段的时候,增加了CLS1(循环左移1位)

SHA256  和 512 分组拓展

Wt = \sigma0( W_{ t -2}) + W_{t -7} + \sigma1( W_{ t -15})+ W_{t -16}
σ0(x)=R1(x)⊕R8(x)⊕S7(x)
σ1(x)=R19(x)⊕R61(x)⊕S6(x)
Rn(x)对变量x循环右移nbit
Sn(x)对变量x左移nbit,右边填充0


2.3 轮函数(每段一轮,此外MD5还会重复4轮)

 红色田字方块或+号代表 mod  2^32^ 相加,即将两个数字加在一起,如果结果大于$ 2^32^ , 需除以 2^32^ 并找到余数

 MD5

F 函数有四个
循环轮数          对应的逻辑函数          (&是与,|是或,!~是非,^是异或)
1                        F(X,Y,Z)        (X & Y) | (~X & Z)
2                        G(X,Y,Z)        X & Z | Y&(~Z)
3                        H(X,Y,Z)      X^Y^Z
4                        I(X,Y,Z)        Y^(X | ~Z)

SHA1

SHA256

∑0(x)=S2(x)⊕S13(x)⊕S22(x)
∑1(x)=S6(x)⊕S11(x)⊕S25(x)
Rn(x)对变量x循环右移nbit
Sn(x)对变量x左移nbit,右边填充0

SHA512

∑0(x)=R28(x)⊕R34(x)⊕R39(x)
∑1(x)=R14(x)⊕R18(x)⊕R41(x)

2.4分组摘要结果

最后一轮的输出和第一轮的输入即初始化常量相加(模2的32次方)

以SHA512为例


2.5 组间数值传递

取决于分组加密模式 ECB CBC OFB CFB

分组加密模式 ECB CBC OFB CFB_qq_36488756的博客-CSDN博客
2.6 输出摘要  

MD5           转为大端字节序然后拼接得到128bit输出
SHA1         拼接得到128bit输出
SHA256     拼接得到258bit输出
SHA512     拼接得到512bit输出

二、MAC算法

MAC算法其实就是两次加盐,两次hash的一种hash算法
以HmacMD5为例

m        明文
K’        扩展后的密钥
ipad        0x36
opad        0x5c
||        级联
H        hash函数

1.密钥K拓展为K'
1) 假设密钥"a12345678"转Hex编码
    61 31 32 33 34 35 36 37 
2) 然后填充0,让密钥长度到达算法的分组长度,MD5的话就是512bit
    61 31 32 33 34 35 36 37 38 00 00 ... 00 00
3) 如果密钥太长,就先进行MD5,再填充0
    16字节 + 一堆00
2.扩展后的密钥与0x36异或
61 31 32 33 34 35 36 37 38 00 00 ... 00 00
36 36 36 36 36 36 36 36 36 36 36 ... 36 36 

K'    57 07 04 05 02 03 00 01 0e 36 36 ... 36 36
3.与明文级联
假设明文"a1234567"转Hex编码
61 31 32 33 34 35 36

57 07 04 05 02 03 00 01 0e 36 36 ... 36 36 61 31 32 33 34 35 36
4.进行Hash算法
h1 = Hash(57 07 04 05 02 03 00 01 0e 36 36 ... 36 36 61 31 32 33 34 35 36)
5.扩展后的密钥K'与0x5c异或 
6.异或的结果与h1级联
7.再次进行Hash算法  de'dao'zu

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157151.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ECharts基本使用

文章目录Echarts概述Echarts初体验ECharts基础配置Echarts社区介绍Echarts-map使用Echarts概述 常见的数据可视化库: D3.js 目前 Web 端评价最高的 Javascript 可视化工具库(入手难)ECharts.js 百度出品的一个开源 Javascript 数据可视化库Highcharts.js 国外的前…

项目合并后,font字体资源被替换导致TextMeshPro不能显示文字,抢救方法

一,字体消失 项目合并时,因为资源更替,导致TextMeshPro不能找到自己原来使用的font资源,以致不能显示文字。 二、抢救方式 1、找到所有用到TextMeshPro的物体2、把他们的字体重新设置成你要的字体 关键步骤: 1、找…

赛事推荐| 建筑物实例分割和高度估计的多任务学习——2023 IEEE GRSS 数据融合赛道2

1. 赛题名称 联合建筑物提取和高度估计的多任务学习 2. 赛题背景 该轨道定义了建筑物提取和高度估计的联合任务。两者都是建筑改造的两个非常基础和必不可少的任务。与轨道 1 相同,输入数据是多模态光学和 SAR 卫星图像。单视图卫星图像中的建筑物提取和高度估计…

记录redis连接被打满的踩坑之路

一、系统异常现象系统有一个功能向别的系统多线程推送用户数据信息,前几天发现该推送功能报内部错误,经过查看后台日志文件,发现org.redisson.client.RedisConnectionException: Unable to connect to Redis server:,io.netty.cha…

使用docker训练yolov5

使用docker训练yolov5 配置docker,配置的好处是docker中的环境或者说容器坏了不影响主机,并且可以减少配置环境的时间和精力 sudo apt update sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common # c…

Docker 部署SQL Server 2017

Docker 部署SQL Server 2017 Docker部署 registry Docker搭建 svn Docker部署 Harbor Docker 部署SQL Server 2017 Docker 安装 MS SqlServer Docker部署 Oracle12c 文章目录Docker 部署SQL Server 2017一、部署步骤1.下载镜像2.创建容器并运行二、参考文档一、部署步骤 1.下…

Unity 之 资源加载 -- 可寻址系统概念介绍 -- 入门(一)

可寻址系统面板概念 -- 入门(一)一,可寻址系统概念介绍1.1 官方话术1.2 几个概念二,可寻址系统目录介绍2.1 导入工程2.2 目录介绍概述:本片文章带大家了解可寻址系统的相关概念,为大家介绍可寻址系统导入方…

生成数据分析报告pandas_profiling.ProfileReport

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 生成数据分析报告 pandas_profiling.ProfileReport 选择题 对于以下python代码表述错误的一项是? import pandas as pd import pandas_profiling as pp dfpd.DataFrame({ a:[23,18,21], b:[…

excel数据核对技巧:如何用函数公式标识输入正误

我们平时人工录入较长的文本数据时,稍不注意就容易出错。为了避免出错,通常我们会提前对单元格设置数据验证。有些时候,我们还会考虑列与列之间的关系,根据列关系自动判定数据的对错。比如下表,款号、货号、色号、条码的信息均存在…

【MySQL进阶教程】InnoDB引擎

前言 本文为 【MySQL进阶教程】InnoDB引擎 相关知识,下边将对InnoDB引擎介绍,InnoDB引擎架构,事务原理,MVCC等进行详尽介绍~ 📌博主主页:小新要变强 的主页 👉Java全栈学习路线可参考&#xff…

获取每年的周数据 第几周 开始日及结束日 思路

public static void main(String[] args) {int year 2023;SimpleDateFormat simpleDateFormat new SimpleDateFormat("yyyy-MM-dd");while (true) {int weekValue 1;Calendar calendar new GregorianCalendar();//***踩坑 // calendar.setFirstDayOfW…

冒泡排序终极版(模拟qsort)

目录 普通版冒泡排序 qosrt函数 终极版冒泡排序 终极版冒泡排序整体测试代码 普通版冒泡排序 冒泡排序想必大家都很了解了吧,冒泡排序的算法思想就是两两比大小,一轮一轮比,每比完一轮排出一个数字的顺序,那就让我们先来看一…

软件测试/测试开发丨从 0 开始学 Python 自动化测试开发(二):环境搭建

本文是「从 0 开始学 Python 自动化测试开发」专题系列文章第二篇 —— 环境搭建篇,适合零基础入门的同学。没有阅读过上一篇的同学,请戳蓝色字体阅读。作者方程老师,是前某跨国通信公司高级测试经理,目前为某互联网名企资深测试技…

【算法基础】1.4 高精度(模拟大数运算:整数加减乘除)

文章目录高精度加法题目描述解法高精度减法题目描述解法讲解高精度乘法题目描述解法讲解高精度除法题目描述解法讲解本文主要讲解高精度计算,包括加法、减法、乘法和除法。 对于Python选手,python自带高精度计算;Java也有BigInteger类。但是对…

javaEE 初阶 — 多线程— JUC(java.util.concurrent) 的常见类

文章目录1. Callable 接口1.1 Callable 的用法2. ReentrantLock2.1 ReentrantLock 的缺陷2.1 ReentrantLock 的优势3. 原子类4. 信号量 Semaphore5. CountDownLatch6. 相关面试题1. Callable 接口 类似于 Runnable 一样。 Runnable 用来描述一个任务,描述的任务没有…

我们一直在说数字化转型,什么才是数字化转型?

我们一直在说数字化转型,什么才是数字化转型?深度长文,4000字,融合了很多国内外专业期刊观点,一文讲清到底什么是企业数字化转型,心急的小伙伴可以先看目录: 关于定义——到底什么是“数字化转…

24 届秋招 | 高质量学习交流环境

大家好,我和一些计算机方向、背景非常优秀的、来自清华、新国立等知名大学的几位同学以及工作多年的高级研发工程师一起运营了一个知识星球。 星球里有大量国内top985、海外名校的同学在一起,目的是为了打造一个非常优质量的社群。 如果你也曾苦于在各…

PySimpleGUI图形化界面实现Office文件格式转换

PySimpleGUI图形化界面实现Office文件格式转换Python实现三种文件两个版本的格式转换1、doc与docx格式互相转换2、xls与xlsx格式互相转换3、ppt与pptx格式互相转换PythonPySimpleGUI实现综合版本Python实现三种文件两个版本的格式转换 1、doc与docx格式互相转换 这里主要运用…

excel求和技巧:如何忽略错误值进行求和

按照对应的订单号引用已有的收货金额,这种问题相信很多朋友都会处理,用VLOOKUP函数就能搞定。我们今天要讨论的是如何对含有错误值的数据进行求和。如果直接求和,得到的结果也是一个错误值,如下图:对于这种要对含有错误…

Linux驱动开发基础__ Linux中断系统中的重要数据结构

目录 1 整体概述 2 irq_desc 数组 3 irqaction 结构体 4 irq_data 结构体 5 irq_domain 结构体 6 irq_chip 结构体 1 整体概述 该文章内容,可以从 request_irq(include/linux/interrupt.h)函数一路分析得到。 能弄清楚下面这个图,对 Linux 中…