报文摘要算法

article/2025/9/27 17:13:26

1 报文摘要算法

报文摘要算法是一种将任意长度报文转换成固定长度的报文摘要算法。它具有以下六个特点:能够作用于任意长度的报文;产生有限位数的标识信息;易于实现;具有单向性;具有抗碰撞性;具有高灵敏性。

1.1 MD5

1.1.1 添加填充位

将报文X添加首位为1,其余为0的填充位,填充位长度为Y,使得X与Y的和模512为448。最后加上表示报文长度的64位二进制数,共同组成数据序列。

1.1.2 分组操作

将数据序列分割成512位的数据段,对每一段数据段单独进行报文摘要运算,每一段数据段的输入是512的数据段和前一段进行报文摘要运算后的128位结果。

1.1.3 MD5运算过程

每一段的512位数据段,它包含4级运算,每一级运算过程进行16次迭代运算。512位数据段被分成16个32位的字,16次迭代运算,输出为32位。4级运算一共产生4*32位=128位结果。
在这里插入图片描述

初始运算有一个128位的初始向量,第一个数据段的运算过程的输入是初始向量和第一个数据段,其后数据段的运算过程的输入是512位的数据段和上一段运算的结果。
在这里插入图片描述

1.2 SHA-1

与MD5有相同的填充过程与分组操作。不同的是初始向量与每一段的运算结果是5个32位的字;所以每一级进行20次迭代运算,4级共80次运算。需要将16个32位数据段扩展为80个32位字并分别参加80次迭代运算,但每一级操作使用同一个常量,故常数只需4个。
二者比较来看,SHA-1的摘要长度是160位,MD5的摘要长度是128位,SHA-1的抗碰撞性更好,同时也使得其计算复杂性高。

1.3 消息鉴别码(Hashed Message Authentication)

对消息的报文摘要进行加密运算后得到的结果,用于实现消息完整性检测的附加信息。
密钥K需要扩充到与数据段长度b相同,变为密钥K+。然后K+与某字节1异或得到S1,K+与某字节2异或得到S0,将S1与报文P串接后进行报文摘要运算,并将运算后的结果扩展为b位并与S0串接,再进行报文摘要运算,最后得到的结果就是HMAC。

1.4 报文摘要应用

1.4.1 完整性检测

应用密钥对报文进行加密并生成附加信息,将附加信息与报文一起发送,接收端可以使用相同密钥进行解密以验证报文在运输过程中是否被修改。

1.4.2 消息鉴别

消息鉴别是验证消息M确实是X发送的过程。

1.4.3 口令安全存储

算法的单向性使得在知道报文摘要h的情况下,无法找到报文P使得h=MD§。

1.4.4 数字签名

数字签名是某个报文的附加信息,该附加消息能够证明签名者的真实性,也能证明签名者是对该报文的确认。

2 报文摘要算法代码(MD5)

# -*- coding: utf-8 -*-import struct
import math
import binasciilrot = lambda x,n: (x << n)|(x >> 32- n)  #循环左移的骚操作#初始向量
A, B, C, D = (0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476)
# A, B, C, D = (0x01234567, 0x89ABCDEF, 0xFEDCBA98, 0x76543210)#循环左移的位移位数
r = [   7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,5,  9, 14, 20, 5,  9, 14, 20, 5,  9, 14, 20, 5,  9, 14, 20,4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]#使用正弦函数产生的位随机数,也就是书本上的T[i]
T =  [int(math.floor(abs(math.sin(i + 1)) * (2 ** 32))) for i in range(64)]def init_mess(message):global Aglobal Bglobal Cglobal DA, B, C, D = (0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476)# A, B, C, D = (0x01234567, 0x89ABCDEF, 0xFEDCBA98, 0x76543210)#将python值转为字节流      Q--Standard size=8  length = struct.pack('<Q', len(message)*8)  #原消息长度64位比特的添加格式,bytes类型while len(message) > 64:solve(message[:64])message = message[64:]#长度不足64位消息自行填充#因为python3对字符串和二进制数据流做了明确的区分,所以需要先将message的数据类型改为bytesmessage=bytes(message,'utf-8') # type convert to bytesmessage += b'\x80'message += b'\x00' * (56 - len(message) % 64)#len=56message += length  # len=64#print(binascii.b2a_hex(message))solve(message[:64])def solve(chunk):global Aglobal Bglobal Cglobal D#将字节流转为python数据类型  I---Standard size=4  python type=integerM = list(struct.unpack('<' + 'I' * 16, chunk))  #分成16个组,I代表1组32位#print(M)a, b, c, d = A, B, C, Dfor i in range(64):  #64轮运算if i < 16:  #每一轮运算只用到了b,c,d三个f = ( b & c)|((~b) & d)flag  = i      #用于标识处于第几组信息elif i < 32:f = (b & d)|(c & (~d))flag = (5 * i +1) %16elif i < 48:f = (b ^ c ^ d)flag  = (3 * i + 5)% 16else:f = c ^(b |(~d))flag  = (7 * i ) % 16tmp = b + lrot((a + f + T[i] + M[flag])& 0xffffffff,r[i]) #&0xffffffff为了类型转换a, b, c, d = d, tmp & 0xffffffff, b, c#print(hex(a).replace("0x","").replace("L",""), hex(b).replace("0x","").replace("L","") , hex(c).replace("0x","").replace("L",""), hex(d).replace("0x","").replace("L",""))A = (A + a) & 0xffffffffB = (B + b) & 0xffffffffC = (C + c) & 0xffffffffD = (D + d) & 0xffffffffdef digest():#output长度为16*8=128global Aglobal Bglobal Cglobal Dprint(type(struct.pack('<IIII',A,B,C,D)))return struct.pack('<IIII',A,B,C,D)def hex_digest():#返回二进制表示的十六进制表示# decode()方法以 encoding 指定的编码格式解码字符串,默认为字符串编码return binascii.hexlify(digest()).decode()if __name__ == '__main__':while True:mess = input("请输入你的信息:")init_mess(mess)out_put = hex_digest()print(out_put)

http://chatgpt.dhexx.cn/article/dRsJKlYJ.shtml

相关文章

摘要算法

摘要算法是一种能产生特殊输出格式的算法&#xff0c;这种算法的特点是&#xff1a;无论用户输入多少长度的原始数据&#xff0c;经过计算后输出的密文都是固定长度的&#xff0c;这种算法的原理是根据一定的运算规则对原数据进行某种形式的提取&#xff0c;这种提取就是摘要&a…

JAVA摘要算法

数据摘要算法是密码学算法中非常重要的一个分支&#xff0c;它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能&#xff0c;由于其不可逆性&#xff0c;有时候会被用做敏感信息的加密。数据摘要算法也被称为哈希&#xff08;Hash&#xff09;算法、散列算法。…

摘要算法和加密算法

什么是摘要算法&#xff1f; 摘要算法就是哈希算法&#xff0c;将一条任意长度字符串转为32位的哈希值&#xff0c;是单向的&#xff0c;不能解密。常见的摘要算法有MD5和SHA&#xff0c;本文将用java对MD5算法进行实现。 摘要算法的用途&#xff1f; 1.登录密码的加密&…

三种摘要算法的简单介绍

原文地址&#xff1a; http://blog.csdn.net/u013991521/article/details/48193953 介绍&#xff1a; 消息摘要算法分为三类&#xff1a; MD(Message Digest)&#xff1a;消息摘要 SHA(Secure Hash Algorithm)&#xff1a;安全散列 MAC(Message Authentication Code)&…

数据分析之运营篇

文章目录 1.指标体系定目标 1.1根据运营的目的&#xff0c;选取不同的指标类型 1.2.北极星指标 1.3 用户留存指标 2.数据分析找问题 2.1.描述分析 2.2多维分析 2.3.相关性分析 2.4.方差分析 2.5 样本检验 2.6 预测分析 3. 3A3R做决策 3.1洞察 3.2获客 3.3.活跃…

京东数据分析工程师(实习生)笔试

忙了一个星期&#xff0c;把最近的笔试面试记录一下。 京东前面单选多选题&#xff0c;后面3道编程题。小题考的很细&#xff0c;各种概率论统计数据库机器学习的知识点&#xff0c;很多都是蒙的&#xff0c;默默的把不会的题记下来&#xff0c;等再学会怎么做了以后发现蒙的都…

Python人力资源员工离职原因数据分析

本项目的数据集来源kaggle竞赛项目:HR-Analytics,自行下载即可! 1.提出问题 公司当中员工们离职的原因是什么? 什么样的员工会离职呢? 2.读取数据,理解数据 导入数据分析工具包,这次我们用seaborn库来优化我们的数据可视化图表! 读取数据 查看数据,head()方法没…

数据分析案例-电影数据分析

目录 电影数据集介绍 加载数据 数据探索和清洗 评分最多的电影 评分最高的电影 评分与年龄的关系 不同年龄段对某部电影的评分 电影数据集介绍 用户信息 #u.user #列名称 user_id,age,gender,occupation,zip_code #数据 1|24|M|technician|85711 2|53|F|other|94043 3…

数据分析岗位招聘分析

项目背景 学习实践数据分析&#xff0c;形成完整报告。分析目标&#xff1a;从行业、城市、学历、经验分析薪资及需求量分布情况 数据获取 集搜客获取拉勾【数据分析】为关键词的职位列表&#xff0c;根据列表职位详情地址爬取职位详情&#xff0c;435条记录,删除重复值后有…

数据分析的工作目标是什么

题图与内容无关&#xff0c;骗点击的。。。 其实这是回答我知识星球一位读者的问题&#xff0c;但恰好也是我现在在做的事情&#xff0c;所以想想&#xff0c;可以写一篇文章分享一下。 数据分析团队的工作方向&#xff0c;按照阶段分为如下目标。 1、提供准确、可靠、及时的基…

数据分析 面经(已拿到offer)

北航计算机专业&#xff08;计院太卷&#xff0c;现考虑转向信息安全方向&#xff09;本科二年级&#xff0c;闲来无事找份日常实习试试水 考虑数分岗也是因为楼主目前大二&#xff0c;专业课学习不够深入&#xff0c;开发技术尚不成熟&#xff0c;而sql、excel和数据可视化比…

数据分析笔试经典sql题解

欢迎关注微信公众号&#xff1a;开心数据 前言&#xff1a;sql是数据分析师笔试必考的考点之一&#xff0c;常考的题型有行列转换、联表查询&#xff0c;这些都比较简单&#xff0c;一般考的最难的就是hivesql窗口函数联表查询&#xff0c;普通的聚合函数每组(Group by)只返回…

滴滴出行2020数据分析面试题

目录 数据来源字段释义指标释义其他信息加载包加载数据数据预处理 问题1 订单的应答率、完单率分别是多少&#xff1f;2 呼叫应答时间多长&#xff1f;3 呼叫量最高的是哪一个小时&#xff08;当地时间&#xff09;&#xff1f;呼叫量最少的是哪一个小时&#xff08;当地时间&a…

大数据分析实习生应该如何选择职业方向?

那么&#xff0c;大数据方向实习生到底该做些什么? Excel2013目前可以支持104万行数据&#xff0c;即使是这样也远远算不上大数据。 以下是华院数据整理的2015年大数据相关公司排名 看看你的公司在不在里边? 话说回来&#xff0c;对于一个实习生来说&#xff0c;让你处理Ex…

大数据分析实习生面试题库

大数据分析是一个有吸引力的领域&#xff0c;因为它不仅有利可图&#xff0c;而且您有机会从事有趣的项目&#xff0c;而且您总是在学习新事物。如果您想从头开始&#xff0c;请查看大数据分析实习生面试题库以准备面试要点。 大数据分析是一个有吸引力的领域。这是有利可图的&…

数据分析师实习岗笔试题(part1)

笔试后记,仅供参考 因为公司说不能泄露笔试题,所以我就加了点润色,但是不影响内容 限时免费:3小时 前言 笔试时间:2020年6月 笔试方式:在线笔试 笔试内容:sql语言、R语言/python、统计学相关知识 笔试时间:2小时之内 来几个励志的名人名言吧 要随时牢记在心中:决心…

【数据分析】滴滴数据分析岗实习经验

转载自&#xff1a;数据管道 原作者介绍&#xff1a;双非院校刚毕业的统计硕士&#xff0c;目前在滴滴工作&#xff0c;有8个月的数据分析实习经历&#xff0c;面试过10位以上数据分析实习生&#xff0c;最终成为了产品经理。 在原文的基础上有过删减。 两个主题 本文的主要目…

数据分析真题日刷 | 网易2018实习生招聘笔试题-数据分析实习生

上周开始实习&#xff0c;博客更新就缓下来了。这是十天前做的套题了&#xff0c;现在拾起来把它再整理整理。 网易数据分析实习生的笔试题&#xff0c;和校招的题目还是有部分重复的&#xff0c;不过难度也不小。 今日真题 网易2018实习生招聘笔试题-数据分析实习生 &#x…

数据分析——实习僧数据分析岗招聘信息分析

随着互联网技术不断完善,市场竞争日益激烈,粗放经营的企业将很难实现可持续发展。为改变这一现状,越来越多的企业开始对自身数据进行深度分析和挖掘,并以此辅助决策人员进行精细化决策管理。由此,越来越多的数据分析师应运而生。 本人初步踏入这一领域,希望对数据分析实…

分析数据分析实习岗位信息(1、数据获取)

目录 1.1 网页分析1.2 字体反扒机制1.3 构造字典1.4 创建表1.5 根据自己的需要进行修改 又到了一年一度的秋招了&#xff0c;由于受疫情的影响&#xff0c;部分公司减少了数据分析相关岗位的实习名额&#xff0c;为了更了解秋招的相关岗位信息&#xff0c;这里针对实习僧 网站…