@@ -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