Skip to content

Commit 4974d53

Browse files
committed
readme稍作修改
1 parent 5fc15c2 commit 4974d53

1 file changed

Lines changed: 90 additions & 91 deletions

File tree

README.md

Lines changed: 90 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,10 @@ public static void main(String[] args) {
104104
- e是英语中最常用的字母,其出现频率为八分之一
105105
- 由于破解太简单,在此不贴代码了,有兴趣的自己试试
106106

107-
##常见加密方式
108-
![Logo](imgs/i003.png)
109-
##对称加密
107+
## 对称加密
110108
> 以分组为单位进行处理的密码算法称为**分组密码(blockcipher)**
111-
- 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
109+
![Logo](imgs/i003.png)
110+
- 对称加密采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
112111
- 示例
113112
- 我们现在有一个原文3要发送给B
114113
- 设置密钥为108, 3 * 108 = 324, 将324作为密文发送给B
@@ -122,90 +121,90 @@ public static void main(String[] args) {
122121
- 加密后编码表找不到对应字符, 出现乱码
123122
- 一般结合Base64使用
124123

125-
## 分组密码的模式
126-
1. 按位异或
127-
128-
- 第一步需要将数据转换为二进制
129-
130-
- 按位异或操作符: ^
131-
132-
- 两个标志位进行按位异或操作:
133-
134-
- 相同为0, 不同为1
135-
136-
- 举例:
137-
138-
```go
139-
1 0 0 0 ----> 8
140-
1 0 1 1 ----> 11
141-
-----------------------按位异或一次
142-
0 0 1 1 ----> 3
143-
1 0 1 1 ----> 11
144-
-----------------------按位异或两侧
145-
1 0 0 0 -----> 8
146-
=================================
147-
a = 8
148-
b = 11
149-
a 和 b按位异或1次 ==> 加密
150-
得到的结果再次和 b 按位异或 ===> 解密
151-
```
152-
153-
2. ECB - Electronic Code Book, 电子密码本模式
154-
155-
- 特点: 简单, 效率高, 密文有规律, 容易被破解
156-
- 最后一个明文分组必须要填充
157-
- des/3des -> 最后一个分组填充满8字节
158-
- aes -> 最后一个分组填充满16字节
159-
- 不需要初始化向量
160-
161-
3. CBC - Cipher Block Chaining, 密码块链模式
162-
163-
- 特点: 密文没有规律, 经常使用的加密方式
164-
- 最后一个明文分组需要填充
165-
- des/3des -> 最后一个分组填充满8字节
166-
- aes -> 最后一个分组填充满16字节
167-
- 需要一个初始化向量 - 一个数组
168-
- 数组的长度: 与明文分组相等
169-
- 数据来源: 负责加密的人的提供的
170-
- 加解密使用的初始化向量值必须相同
171-
172-
4. CFB - Cipher FeedBack, 密文反馈模式
173-
174-
- 特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
175-
- 需要一个初始化向量 - 一个数组
176-
- 数组的长度: 与明文分组相等
177-
- 数据来源: 负责加密的人的提供的
178-
- 加解密使用的初始化向量值必须相同
179-
- 不需要填充
180-
181-
5. OFB - Output-Feedback, 输出反馈模式
182-
183-
- 特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
184-
- 需要一个初始化向量 - 一个数组
185-
- 数组的长度: 与明文分组相等
186-
- 数据来源: 负责加密的人的提供的
187-
- 加解密使用的初始化向量值必须相同
188-
- 不需要填充
189-
190-
6. CTR - CounTeR, 计数器模式
191-
192-
- 特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
193-
- 不需要初始化向量
194-
- 不需要填充
195-
196-
7. 最后一个明文分组的填充
197-
198-
- 使用cbc, ecb需要填充
199-
- 要求:
200-
- 明文分组中进行了填充, 然后加密
201-
- 解密密文得到明文, 需要把填充的字节删除
202-
- 使用 ofb, cfb, ctr不需要填充
203-
204-
8. 初始化向量 - IV
205-
206-
- ecb, ctr模式不需要初始化向量
207-
- cbc, ofc, cfb需要初始化向量
208-
- 初始化向量的长度
209-
- des/3des -> 8字节
210-
- aes -> 16字节
211-
- 加解密使用的初始化向量相同
124+
- 分组密码的模式
125+
1. 按位异或
126+
127+
- 第一步需要将数据转换为二进制
128+
129+
- 按位异或操作符: ^
130+
131+
- 两个标志位进行按位异或操作:
132+
133+
- 相同为0, 不同为1
134+
135+
- 举例:
136+
137+
```go
138+
1 0 0 0 ----> 8
139+
1 0 1 1 ----> 11
140+
-----------------------按位异或一次
141+
0 0 1 1 ----> 3
142+
1 0 1 1 ----> 11
143+
-----------------------按位异或两侧
144+
1 0 0 0 -----> 8
145+
=================================
146+
a = 8
147+
b = 11
148+
a 和 b按位异或1次 ==> 加密
149+
得到的结果再次和 b 按位异或 ===> 解密
150+
```
151+
152+
2. ECB - Electronic Code Book, 电子密码本模式
153+
154+
- 特点: 简单, 效率高, 密文有规律, 容易被破解
155+
- 最后一个明文分组必须要填充
156+
- des/3des -> 最后一个分组填充满8字节
157+
- aes -> 最后一个分组填充满16字节
158+
- 不需要初始化向量
159+
160+
3. CBC - Cipher Block Chaining, 密码块链模式
161+
162+
- 特点: 密文没有规律, 经常使用的加密方式
163+
- 最后一个明文分组需要填充
164+
- des/3des -> 最后一个分组填充满8字节
165+
- aes -> 最后一个分组填充满16字节
166+
- 需要一个初始化向量 - 一个数组
167+
- 数组的长度: 与明文分组相等
168+
- 数据来源: 负责加密的人的提供的
169+
- 加解密使用的初始化向量值必须相同
170+
171+
4. CFB - Cipher FeedBack, 密文反馈模式
172+
173+
- 特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
174+
- 需要一个初始化向量 - 一个数组
175+
- 数组的长度: 与明文分组相等
176+
- 数据来源: 负责加密的人的提供的
177+
- 加解密使用的初始化向量值必须相同
178+
- 不需要填充
179+
180+
5. OFB - Output-Feedback, 输出反馈模式
181+
182+
- 特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
183+
- 需要一个初始化向量 - 一个数组
184+
- 数组的长度: 与明文分组相等
185+
- 数据来源: 负责加密的人的提供的
186+
- 加解密使用的初始化向量值必须相同
187+
- 不需要填充
188+
189+
6. CTR - CounTeR, 计数器模式
190+
191+
- 特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
192+
- 不需要初始化向量
193+
- 不需要填充
194+
195+
7. 最后一个明文分组的填充
196+
197+
- 使用cbc, ecb需要填充
198+
- 要求:
199+
- 明文分组中进行了填充, 然后加密
200+
- 解密密文得到明文, 需要把填充的字节删除
201+
- 使用 ofb, cfb, ctr不需要填充
202+
203+
8. 初始化向量 - IV
204+
205+
- ecb, ctr模式不需要初始化向量
206+
- cbc, ofc, cfb需要初始化向量
207+
- 初始化向量的长度
208+
- des/3des -> 8字节
209+
- aes -> 16字节
210+
- 加解密使用的初始化向量相同

0 commit comments

Comments
 (0)