Skip to content

Commit 61f1f8d

Browse files
committed
消息认证成功
1 parent 638b522 commit 61f1f8d

5 files changed

Lines changed: 78 additions & 2 deletions

File tree

README.md

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,78 @@
1-
# SignatureBaseOnJava
2-
java hash signature md5 sha1 sha256 rsa
1+
# 哈希算法
2+
### 概念
3+
4+
称谓: 单向散列函数, 哈希函数, 杂凑函数, 消息摘要函数
5+
6+
接收的输入: 原像
7+
8+
输出: 散列值, 哈希值, 指纹, 摘要
9+
10+
### 单向散列函数特性
11+
12+
1. 将任意长度的数据转换成固定长度的数据
13+
2. 很强的抗碰撞性
14+
3. 不可逆
15+
4. MD4/MD5
16+
- 不安全
17+
- 散列值长度: 128bit == 16byte
18+
5. sha1
19+
- 不安全
20+
- 散列值长度: 160bit == 20byte
21+
6. sha2 - 安全
22+
- sha224
23+
- 散列值长度: 224bit == 28byte
24+
- sha256
25+
- 散列值长度: 256== 32byte
26+
- sha384
27+
- 散列值长度: 384bit == 48byte
28+
- sha512
29+
- 散列值长度: 512bit == 64byte
30+
31+
##消息认证码
32+
### 消息认证
33+
34+
> **消息认证码(message authentication code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称为MAC。**
35+
36+
![Logo](imgs/1.png)
37+
38+
- 思考改进方案?
39+
40+
从哈希函数入手
41+
42+
需要将要发送的数据进行哈希运算, 将哈希值和原始数据一并发送
43+
44+
需要在进行哈希运算的时候引入加密的步骤
45+
46+
- 在alice对数据进行哈希运算的时候引入一个秘钥, 让其参与哈希运算, 生成散列值
47+
- bob对数据校验
48+
- bob收到原始和散列值之后,
49+
- 处理原始数据: 通过秘钥和哈希算法对原始数据生成散列值
50+
- 散列值比较: 生成的散列值 和 接收到的散列值进行比对
51+
52+
### 消息认证码的使用步骤
53+
54+
![Logo](imgs/2.png)
55+
56+
> 1. 前提条件:
57+
> - 在消息认证码生成的一方和校验的一方, 必须有一个秘钥
58+
> - 双方约定好使用同样的哈希函数对数据进行运算
59+
> 2. 流程:
60+
> - 发送者:
61+
> - 发送原始法消息
62+
> - 将原始消息生成消息认证码
63+
> - ((原始消息) + 秘钥) * 函数函数 = 散列值(消息认证码)
64+
> - 将消息认证码发送给对方
65+
> - 接收者:
66+
> - 接收原始数据
67+
> - 接收消息认证码
68+
> - 校验:
69+
> - ( 接收的消息 + 秘钥 ) * 哈希函数 = 新的散列值
70+
> - 通过新的散列值和接收的散列值进行比较
71+
72+
### 消息认证码的问题
73+
74+
1. 弊端
75+
- 有秘钥分发困难的问题
76+
2. 无法解决的问题
77+
- 不能进行第三方证明
78+
- 不能防止否认

imgs/1.png

11 KB
Loading

imgs/2.png

18.2 KB
Loading

imgs/3.png

92.3 KB
Loading

imgs/4.png

23.7 KB
Loading

0 commit comments

Comments
 (0)