目录

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

1. 明文数据预处理

1.1 填充比特

1.2 附加消息长度

2. 摘要计算

2.1 常量初始化

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

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

2.4分组摘要结果

2.5 组间数值传递

2.6 输出摘要

二、MAC算法


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

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 0061 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 分组拓展


σ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

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

  1. MD5 SHA1 SHA256 SHA512 SHA1WithRSA RSA 的区别

    转自:http://www.cnblogs.com/cxygg/p/9468653.html https://blog.csdn.net/hengshujiyi/article/details/459 ...

  2. c#加密:二、散列法 MD5、SHA256、SHA512

    散列法提供了一种单向加密的方式.这种方式非常适用于在数据库中存储密码.因为我们无须(也不希望)提供解密的信息.在登录验证时,只需简单地将用户的输入进行散列,并和数据库中存储的散列值进行比较即可. 由于 ...

  3. python hashlib库(MD5,sha1,sha256,sha512,pbkdf2_hmac)用法及pbkdf2原理

    文章目录 1 python hashlib 库 1.1 md5 1.2 sha1 1.3 sha256 1.4 sha512 1.5 pbkdf2_hmac 2 PBKDF2 函数原理 2.1 PBK ...

  4. [JAVA]数字摘要算法工具类——(Hamc)MD5/SHA1/SHA256/SHA512/PBKDF2

    文章目录 API调取 精简版的JAVA代码 完整代码 API调取 方法 补充说明 getMD5 获得MD5摘要 getSHA1 获得SHA1摘要 getSHA256 获得SHA256摘要 getSHA ...

  5. java md5 密钥_java加密算法--MD5加密和哈希散列带秘钥加密算法源码

    packagecom.ompa.common.utils;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmEx ...

  6. 【算法详解】数据结构:7种哈希散列算法,你知道几个?

    一.前言 哈希表的历史 哈希散列的想法在不同的地方独立出现.1953 年 1 月,汉斯·彼得·卢恩 ( Hans Peter Luhn ) 编写了一份IBM内部备忘录,其中使用了散列和链接.开放寻址后 ...

  7. 在线字符串哈希/散列加密工具

    在线字符串哈希/散列工具 在线字符串哈希/散列工 本工具可以获取多种散列方式的哈希值,如MD5,SHA1,SHA224,SHA256,SHA384,SHA512,HmacMD5,HmacSHA1等,基 ...

  8. shiro使用md5salt哈希散列加密

    我们先得到MD5加密后的字串 @Testpublic void test01(){//md5Md5Hash md5Hash = new Md5Hash("123456");Syst ...

  9. 03,redis多键值对,哈希散列hset

    // 客户端Jedis连接到服务端,并选择第2个数据库Jedis jedis = new Jedis("127.0.0.1",6379);jedis.select(1);jedis ...

最新文章

  1. 宏定义来实现一个结构体成员相对于该结构体首地址的偏移量
  2. HDU2853(最大权完美匹配)
  3. (27)TLB番外篇——ShadowWalker
  4. FLV封装格式介绍及解析
  5. 一个.NET Core开发者的Linux入门学习笔记
  6. golang的panic用法
  7. codeforces 892E(离散化+可撤销并查集)
  8. sql 逻辑运算符_SQL Like逻辑运算符介绍和概述
  9. sklearn.metrics.roc_curve使用说明
  10. WPS 2019|WPS Office 2019官方最新版 v11.1下载
  11. Python找出数组中重复数字
  12. 安装mysql忘了初始密码咋办_mysql安装忘记初始密码怎么办
  13. 龙芯平台的播放器和浏览器硬解1080和4k视频
  14. 金庸武侠、四大名著的语言风格
  15. Serval and Rooted Tree(CF1153D)-DP
  16. (初学者)关于C语言中退格键(\b)的初步了解
  17. 吃鸡什么耳机听声辨位比较好?适合苹果手机的耳机推荐
  18. 日期时间选择器bootstrap(手机适应)
  19. SpringBoot之RMI的简单使用
  20. 关于最小二乘估计的一点理解和感悟

热门文章

  1. mysql的功能是什么_数据库的作用是什么
  2. ShaderGraph 之实现虚拟室内效果
  3. UnicodeDecodeError: ‘utf-8’ codec can’t decode解决办法
  4. div及iframe滚动条固定为最底端
  5. PostgreSQL进程
  6. 启用本地IIS服务器操作
  7. 计算机外观屏幕怎么设计,京东划出“设计师电脑”分类,戴尔联想产品是如何诠释“设计师电脑”的?...
  8. chatgpt赋能python:Python的三角函数tan
  9. 如何在 macOS 12 Monterey 中使用快速笔记
  10. 如何打造一款自己的 VSCode 主题?