非常通俗易懂的解释密码算法原理!
来源:互联网 发布:淘宝哪些店铺书包好看 编辑:程序博客网 时间:2024/06/10 05:03
密码分析(上)
Tip:因为考试需要而总结的,因为写的比较通俗易懂,就放到博客里来了。
一、代换密码
1.1 移位(凯撒)密码
应该是
注意:别被左边那种公式误导了,应该是先加再取余的,下面我按0-25代表a-z来算(这个无所谓了,你用ASCII码来算都可以,只要最后再算回字母来表示密文就行了)
mod就是求余数的,N就是26(26个英文字母),假如k取为3
比如a的加密过程,
(‘a’ + 3) mod 26就相当于4对 26取余 算出来就是‘d’(4)
再比如z的加密过程
(‘z’ + 3) mod 26就相当于28对 26取余 算出来就是‘c’(3),
如果先取余就是25+3 (28)这个就跑出a-z的范围了
举个例子
原密码:a o p c d e f
加密后:d r s f g h i
1.2 单表代换
简单说就是一个字母在一张密码表里对应固定的另一个字符
加密表(当然这表可以由自己随便给[一行放不下,放两行了]):
0 1 2 3 4 5 6 7 8 9 10 11 12
21 12 25 17 24 23 19 15 22 13 18 3 9
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - -- - - -
13 14 15 16 17 18 19 20 21 22 23 24 25
5 10 2 8 16 11 14 7 1 4 20 0 6
解密表(扳着脚趾头想都可以想到是上面翻过来的):
0 1 2 3 4 5 6 7 8 9 10 11 12
24 21 15 11 22 13 25 20 16 12 14 18 1
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - -- - - -
13 14 15 16 17 18 19 20 21 22 23 24 25
9 19 7 17 3 10 6 23 0 8 5 4 2
0-25分别代表A-Z,就比如说c(2)加密就会变为z(25),解密时z(25)-->c(2)
举个例子
原密码:a o p c d e f
加密后:v k c . . . . (剩下的我就不算了,这26个字母数的比较烦)
1.3 仿射代换(乘数密码)
应该是
注意:还是别被左边那种公式误导了,应该是先加再取余的,解密的时候肯定先减掉了,比如k1 取7,k2取2,N还是26个英文字母,最终加密公式就是(7m+2)mod 26(m就是密码),解密公式就是(c-2)/7 mod 26(c是加密后的数据,-1次方就是除法,都知道的)
比如a是0 加密:(0×7+2)mod 26 = 2 即为 c
c是2 解密:((2 – 2)/7 )mod 26 = 2 即为a
举个例子
原密码:a o p c d e f
加密后:c u d . . . . (剩下的我就不算了)
1.4 多表代换(维吉尼亚代换方阵)
这个相当简单,只要把这个表记住就万事大吉了(啥?记不住,那你写在手心上吧! ! !)
首当其冲的举个例子
比如密钥串为radio 加密时就把密码按每5位为一组(radio的长度)来加密比如aopcdef前五个aopcd就是一组,ef又是一组
a的对应密码就是r行的a列,
o的对应密码就是a行的o列,
p的对应密码就是d行的p列,
c的对应密码就是i行的c列,
d的对应密码就是o行的d列,
- - - - - - - - - - - - - - - - - - - - -- - - - - - - - -- - - - - - - - - - - - - - -
e的对应密码就是r行的e列,
f的对应密码就是a行的f列(就这个规律,就这么简单,记住上面27*27的表搞定一切)
- - - - - - - - - - - - - - - - - - - - -结果- - - - - -- - - - - - - - - - - -- - -
原密码:a o p c d e f
加密后:r p s . . . . (剩下的你自己填下试试吧)
二、置换密码
为啥叫置换,因为这个算法仅仅只是把密码字符的位置换了一下
2.1 无密钥换位
这个非常非常简单
直接举个例子
原密码:a o p c d e f
加密过程:a o p(当然这一行写几个要看要求,若1行写1个绝对出题者有病)
c d e
f * *
加密后:a c f o d * p e *
总结一下:原密码横着写几行,最后一行写不满放成*,然后从上到下竖着写完就是加密的密文;解密的话,先竖着写下来然后再横着写回来并且去掉*不就是密码吗? (什么?你看不懂,那你还是重修下小学课程吧. . .)
2.2 有密钥换位
这个也是非常的简单
直接举个例子
原密码:a o p c d e f
加密密钥为:p=(p(1),p(2),p(3),p(4))=(2, 4, 1, 3)
加密过程:a o p c
o c a p
d e f *
e * d f
加密后:o c a p e * d f
总结一下:密钥p=(p(1),p(2),p(3),p(4))=(2,4, 1, 3)意思是,把第2个数放到第一个位置,把第4个数放到二个位置,第1个数放到第三个位置,第3个数放到第四个位 置,解密的话,(1,2,3,4) -->(2,4, 1,3)-->(1,2,3,4),(2413变为1234你不会吗,不会?那你还是顺便把幼儿园也重修了吧. . .不会解密的继续往下看)
原密码:a o p c . . . (一,二,三,四) (1,2,3,4)
加密后:o c a p . . . (一,二,三,四) (2,4, 1, 3)
现存的:o c a p . . .
/ ** 第一个位置的内容2放回到第二个位置
* 第二个位置的内容4放回到第四个位置
* 第三个位置的内容1放回到第一个位置
* 第四个位置的内容3放回到第三个位置
*/
解密后:a o p c . . . (一,二,三,四) (1,2,3,4)
三、DES (分组密码,是对称密码的一种)
- - - - - - - - - - - - - - - -- - - - - - - - - - 简单概述- - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - -- - - - - -
分组密码:用一个密钥将一串N长的密码分成N长的密文块,并且可逆
分组密码算法的设计:扩散(Diffusion) 混淆(Confusion)
分组密码两个参数:密钥长度,分组长度
DES加密运算包括1个初始置换IP,16个轮运算以及一个末置换IP-1,最后得到64比特的输出。
初始置换IP的功能是将输入的64位数据分组按位重新组合,没有任何密码意义(不需要密钥)
- - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - -- - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - -- - - - -
3.1 置换表
CSDN上的没数据的表格好乱,我就截图代替了
注意,这个表里面的数字指的都是位置,不是内容。这一个格子里面实际就表示一位1或0二进制数字
解释:一行8个,总共8行,1放到了第四十个位置(看黄图,红框,第五行第8列),所以逆置换要40位置里面的1放回来,填入40就OK,2 (绿框,1*8),3(蓝框, 6*8) 剩下的你自己类比(提示:最好别看着书上32页抄),为什么这样,这不是和二(2)有密钥换位一样吗(还看不懂?那么请到色盲/文盲救助中心参与治疗吧!)
算法流程图
3.2 简要介绍步骤:
(1) 初始置换IP:
把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位
即那个黄图的上四行为L0,下四行为R0(那么L0、R0都是32位)
(2) 轮计算的公式
Li = R(i-1)
Ri = L(i-1) ⊕ f(R(i-1), Ki)(Li、Ri还都是32位)
⊕相当于按位异或,只有0⊕1=或1⊕0=1,1⊕1=0, 0⊕0=0
情侣记法,一男一女才是真的情侣,不同的才是真的
- - - - - - - - - - - - - - - - 以下是f(R(i-1), Ki)要做的事,到下一个绿条结束- - - - - - - - - - - - - - -
f函数的图解
(3) 扩展置换E(也叫位选择表)如下图
这个就是把Ri(32位)扩展成48位(6*8)[因为这个表比如有些位置的内容会放俩次的,比如1位置的出现了两次,内容肯定还是二进制的,图片上的数字仅表示位置], 然后把结果分为B1 B2. . .B8都是6位的子块,然后把这些子块与K密钥相异或(就那个情侣⊕)做为S0 S1 ... S8(S盒,选择(替代)函数)的输入
(4) S盒
S盒就是把上面的Bi子块再转换成一个4位的块,那么现在S1(B1) S2(B2) . . .S8(B8)都是4位的子块(当然还是二进制的)。
具体找的时候,Bi里的b1、b6的那俩数组成的数字(两个二进制组成)对应S这个大表的行,Bi里的b2、b3、b4、b5的这四个数组成的数字(四个二进制组成)对应S这 个大表的列,这行列一交叉对应就会找到输出4位)
举个例子:
假如B1是1 1 0 0 00 ,即b1-->1 b2 -->1 b3 --> 0b4 --> 0 b5 -->0 b6 -->0,那么在S1的行号10(即10进制的第2行),在S1的列号是1000(即10进制的第8列),按着书 上的那个表就得到了15(变成4位那就是1111)
{废话:这也是S盒为什么是4行(00/01/10/11)16列的,因为咱的书上都没标注行列号,如果你直接看书肯定看不明白,一会位置一会二进制的,浮躁的人肯定调浆糊了!}
(5) 换位表P
这个就是将S1(B1) S2(B2) . . .S8(B8)合起来的32位(4*8)换个位置然后输出(具体内容肯定也是二进制010101,只是换下位置)
(6) 子(轮)密钥的生成过程
具体过程看图就大致看出K(64位)先通过PC-1置换分成C0 、D0(为啥是两个28,28*2不是56,因为还有8位是奇偶校验位,奇偶校验是啥,暂时把它当成一个标记, 只是保证数据有戏的一串数字),每次新生成子密钥前都先左移一位,然后再与PC-2置换生成新的子密钥Ki
①第一个子密钥换位函数表PC-1
②第二个子密钥换位函数表PC-2
(有些位置的内容没有那就是被抛弃了,所以58位数才会变为48位的)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - END - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 非常通俗易懂的解释密码算法原理!
- [转]非常通俗易懂的Spring IOC原理
- 算法相关——KMP算法最通俗易懂的解释
- webservice通俗易懂的解释
- 通俗易懂的解释卷积
- maven通俗易懂的解释
- 非常通俗易懂的PCA讲解
- 通俗易懂的Websocket原理
- 对像素通俗易懂的解释
- FFT的详细解释,通俗易懂
- 通俗易懂的数据库范式解释
- 通俗易懂的解释什么是CDN
- "汉诺塔"算法-之通俗易懂,简单的原理-java编程
- 对 粒子滤波算法原理 的介绍,通俗易懂
- 【通俗易懂】层次聚类算法的原理及实现
- 如何通俗易懂地解释遗传算法
- 如何通俗易懂地解释遗传算法
- 通俗易懂的匈牙利算法
- 理解C++ dynamic_cast
- Java设计模式透析之 —— 适配器(Adapter)
- iOS label的lineBreak和行间距的碰撞
- 文章标题
- 2015年自我总结
- 非常通俗易懂的解释密码算法原理!
- Dynamics CRM2016 业务流程之Task Flow(二)
- 总结过去,展望未来
- LeetCode 073 Set Matrix Zeroes
- 时区转换Tips(new)
- MySQL和Oracle常用日期转换函数
- 鸡兔同笼问题
- STM32 串口简介
- Codeforces goodbye 2015