File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+ - 不能防止否认
You can’t perform that action at this time.
0 commit comments