从零学习 CA 系列 (六) -- 常见摘要算法分析

简介: 本文参考《PKI/CA 与数字证书技术大全》书籍,如有理解bug, 请大家指正。MD5MD5 是 MD4 的改进版,以512位分组来处理输入的信息,产生128位散列值。

本文参考《PKI/CA 与数字证书技术大全》书籍,如有理解bug, 请大家指正。

MD5

MD5 是 MD4 的改进版,以512位分组来处理输入的信息,产生128位散列值。
MD5 算法的计算过程主要包括以下步骤:

(1) 预填充

首先,对信息进行填充,使其位长对 512 求余的结果等于 448, 即信息的位长(Bits Length) 被扩展至 N x 512 + 448 或 N x 64 + 54 个字节(N 为一个正整数)。填充的方法为:在信息的后面填充一个1和多个0,直到满足上面的条件。然后,再附加一个64位二进制表示的填充前信息长度。经过这两步处理,使消息长度恰好是512位的整数倍。

(2) 主循环

主循环的次数为信息中512位分组的数目。MD5 中需要4个32位的链接变量: A = 0x01234567, B = 0x89abcdef, C = 0xfedcba98, D = 0x76543210。
每个主循环有4轮(MD4 只有 3 轮), 每轮循环都很相似, 每轮16次操作。在 主循环开始前,先将 4 个链接变量复制到另外4个变量中:A到a, B到b,C到c, D到d。第一轮进行16次操作。每次操作对 a,b,c,d其中3个进行一次非线性函数运算,然后将所得结果加上第4个变量、512位分组数据和一个常数。在将所得结果向右环移一个不定的数,并加上 a, b, c, 或 d 中的一个。最后用该结果取代 a, b, c,或 d 中之一。
每个主循环完成以后,将 A、B、C、D分别加上 a、b、c、d,然后用下一个512位分组数据继续进行主循环运算,直到所有分组都完成主循环运算。

(3) 输出处理

将最后一个主循环生成的 A、B、C、D这四个32位值进行级联,生成一个128位的摘要值。

SHA1

SHA1 是以 512 位分组来处理输入信息,产生 160 位散列值。
SHA1 算法计算过程与 MD5 类似,主要包括如下步骤。

(1) 预填充

填充方法与 MD5 完全一致。

(2) 主循环

主循环的次数为信息中512位分组的数目。SHA1 中需要5个32位的链接变量: A = 0x67452301, B = 0xefcdab89, C = 0x98badcfe, D = 0x10325476, E = 0xc3d2e1f0。
每个主循环有4轮, 每轮20次操作。在 主循环开始前,先将 5 个链接变量复制到另外5个变量中:A到a, B到b,C到c, D到d, E到e。每次操作对 a, b, c, d, e其中3个进行一次非线性函数运算,然后进行与 MD5 中类似的移位运算和加运算。
每个主循环完成以后,将 A、B、C、D、E分别加上 a、b、c、d、e,然后用下一个512位分组数据继续进行主循环运算,直到所有分组都完成主循环运算。

(3) 输出处理

将最后一个主循环生成的 A、B、C、D、E这5个32位值进行级联,生成一个160位的摘要值。

SM3

SM3 算法是由中国国家密码管理局于2012年12月17日发布的摘要算法,主要满足电子认证服务系统等应用需求。
针对长度为 l(l < 2 ^ 64)比特的消息m,SM3 算法经过填充和迭代压缩,生成杂凑值,杂凑值长度为256位。其中填充过程为:假设消息m的长度为l位。首先将位“1”添加到消息的尾未,再添加k个“0”,k 是满足 l + 1 + k = 448 mod 512 的最小的非负整数;然后在添加一个 64 位的比特串,该比特串是长度 l 的二进制表示;填充后的消息 m' 的比特长度为 512 的倍数。

目录
相关文章
|
16天前
|
JSON 监控 算法
员工上网行为监控:利用Scala编写数据处理和分析算法
企业在数字化时代利用Scala进行员工上网行为监控,以确保合规和网络安全。通过Scala的数据处理和分析能力,读取CSV日志数据转换为DataFrame,分析员工行为,如统计最常访问网站。此外,还展示了将监控数据以JSON格式提交至公司网站的函数,实现实时信息更新与安全防护。
60 5
|
5天前
|
机器学习/深度学习 自然语言处理 算法
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
|
11天前
|
机器学习/深度学习 算法 数据可视化
Matlab决策树、模糊C-均值聚类算法分析高校教师职称学历评分可视化
Matlab决策树、模糊C-均值聚类算法分析高校教师职称学历评分可视化
|
11天前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】关联规则学习:Apriori算法详解
【4月更文挑战第30天】Apriori算法是一种用于关联规则学习的经典算法,尤其适用于购物篮分析,以发现商品间的购买关联。该算法基于支持度和置信度指标,通过迭代生成频繁项集并提取满足阈值的规则。Python中可借助mlxtend库实现Apriori,例如处理购物篮数据,设置支持度和置信度阈值,找出相关规则。
|
11天前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】集成学习算法的原理与应用
【4月更文挑战第30天】集成学习通过组合多个基学习器提升预测准确性,广泛应用于分类、回归等问题。主要步骤包括生成基学习器、训练和结合预测结果。算法类型有Bagging(如随机森林)、Boosting(如AdaBoost)和Stacking。Python中可使用scikit-learn实现,如示例代码展示的随机森林分类。集成学习能降低模型方差,缓解过拟合,提高预测性能。
|
12天前
|
算法 搜索推荐 数据挖掘
MATLAB模糊C均值聚类FCM改进的推荐系统协同过滤算法分析MovieLens电影数据集
MATLAB模糊C均值聚类FCM改进的推荐系统协同过滤算法分析MovieLens电影数据集
|
12天前
|
算法 数据可视化 数据挖掘
数据分享|R语言改进的K-MEANS(K-均值)聚类算法分析股票盈利能力和可视化
数据分享|R语言改进的K-MEANS(K-均值)聚类算法分析股票盈利能力和可视化
|
12天前
|
数据采集 存储 算法
数据分享|Weka数据挖掘Apriori关联规则算法分析用户网购数据
数据分享|Weka数据挖掘Apriori关联规则算法分析用户网购数据
|
15天前
|
机器学习/深度学习 数据采集 算法
共享单车需求量数据用CART决策树、随机森林以及XGBOOST算法登记分类及影响因素分析
共享单车需求量数据用CART决策树、随机森林以及XGBOOST算法登记分类及影响因素分析
|
16天前
|
移动开发 算法 数据可视化
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例