古典密码学
密码学的首要目的是隐藏信息的涵义,而并不是隐藏信息的存在,这是密码学与隐写术的一个重要区别。
基本密码
键盘布局加密
- 通常都是给出一堆无意义的字符,但是将这些字符按照在键盘上的布局比划一下,就可以根据形状拼出相应字符。
- 都是圈的情况下,可能是圈起来的那个字母
键盘坐标加密
- 利用键盘上面的字母行和数字行来加密,具体又有两种方法:
- 方法1,以字母行所在的行号作为横坐标,以数字所对应的列作为纵坐标。【第一个数字不超过3】
- 明文“by”加密后的密文是:53 61 31。
- 方法2,以数字所对应的列作为横坐标,以字母行所在的行号作为纵坐标。【第二个数字不超过3】
- 明文“by”加密后的密文是:53 61 31。
- 提交错误可能是大小写需要变换
BrainFuck(BF)和Ook密码
- BrainFuck和ook主要用于对程序源代码进行加密,主要思想是将源码中的指令替换成其它的一些符号。
- 对于这两类加密方法,我们无需去探究其原理,只要在做题时能识别出这是哪种加密方法,然后再利用相应的工具解密即可。
- BF密码用><+-.,[]八种符号来替换C语言的各种语法和命令。
- 2+3经过编码之后的密文:
+++++ ++[->+++++ ++<-]>+.--- ----.+++++ +++.<
- Ook密码由三种符号组成:Ook.、Ook?、Ook!
- 简化的Ook密码:.?!
- 2+3经过编码之后的密文:
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook!
Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook! Ook. Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook. Ook? Ook.
工具:Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org]
替代密码
- 替代密码是指先建立一个替换表,加密时将需要加密的明文依次通过查表,替换为相应的字符,明文字符被逐个替换后,生成无任何意义的字符串,即密文。
- 在替代密码中,每个字母或每一组字母被另一个字母或另一组字母所取代。
- 替代密码保留了明文符号的顺序,但是将明文伪装起来。
摩斯密码
- 摩斯密码是一种早期的数字化通信形式,虽然由点“.”和横“-”两种符号组成,但它不同于现代只使用0和1两种状态的二进制代码。
- 每个密码之间默认采用空格分隔,为了在网页或文件中显示方便,许多摩斯密码也采用斜杠/进行分隔,所以在对摩斯密码转换前往往需要先选择分隔符。
- 或者是可以先手工处理一下,将密文中的分隔符替换成指定的格式。
凯撒密码
- 凯撒密码是典型的替代密码,加密原理是把明文中的所有字母都在字母表中向后(或向前)按照一个固定数目进行移位后替换成密文,而数字和非字母字符则保持不变。
- 位移数就是凯撒密码的密钥。凯撒密码只有25种可能的密钥,当年凯撒用的密钥是3。
- 只把英文字母移位,大小写不变,数字与标点符号不变
凯撒密码的加密和解密
- x代表明文,y代表密文,k代表密钥。
- 字母表从0开始到25结束(eg:A—0)
- 加密:(x+k) % 26
- 解密:(y-k) % 26
R0T13密码(密钥是13的凯撒密码)
- R0T13是凯撒密码的一种变体,移位数固定为13,即把明文中的每一个字母在字母表中向后移动13位,数字和非字母字符保持不变。
- R0T13实现的效果是将26个字母的前半部分与后半部分相互交换。
移位密码(凯撒密码的改进)
- 移位密码是在凯撒密码的基础之上发展而来,移位密码不仅会处理字母,还可能会处理数字和特殊字符,所以常用ASCII码表进行移位。
词频分析(凯撒密码再次改进)
- 由于凯散密码的密钥空间只有25,很容易被破解,后来在凯散密码的基础之上又发展出了单字母替换密码
- 这种加密方法的原理是重排密码表中二十六个字母的顺序。
单表替换密码
- 这种采用简单重新排列明文字母表来作为密码表,且每个相同的明文字母总是被同一个密文字母所替换的被称作单表替换密码。
- 单表替换密码的密钥空间大小是26!(阶乘),也就是大约有03*10^26种密钥这样就很难去暴力破解。所以这种密码持续使用了几个世纪,直到公元9世纪阿拉伯一位科学家发明了频率分析法,可以无需暴力破解,而只需要分析字母在密文里出现的频率就可以破解出明文来。
- 对单表替换密码的破解,标志着密码分析学的诞生。
培根密码
- 培根密码是一种简单的替换密码,密文字符只有两个:a 和b,每个明文字符都会被替换为一个由a和b组成的长度为5的字符串。
- 比如明文h被替换后的密文为aabbb
- 密文字符也可以选择任意两个其它字符
- 如果看到这种全部由两个字母组成的密文,那么就可以猜测可能是培根密码。
- 常规培根密码表:明文和j、u和所对应的密文是一样的。
- 扩展培根密码表,包括所有26个字符。
培根密码的实践应用
工具:http://rumkin.com/tools/cipher/baconian.php
仿射密码(affine)
- 凯撒密码是将明文与密钥相加得到密文,仿射密码则是将明文与密钥的一部分相乘,然后再加上密钥的另一部分。
- 为便于计算,将26个英文字母用数字表示:a=0,b=1,…,z=25。
- 仿射加密的密钥有两个:a和b,取值范围都是[0,25]
- a要求与26互质,互质就是这两个数的公因数只有1
- 26的因数:1、2、13
- a的因素不包含2或13即可,
- a的取值:不包含2或13的都可以
仿射密码加密
- x是明文,y是密文
- 加密公式:y=(ax+b)mod26
- 加密过程:
- a=7、b=3
- 加密:y=(7x+3)mod26
- 假设明文为c,那么x的值为2,
- 所以y=17,密文为r。
仿射密码的解密
- 解密公式:x=a-1(y-b)mod26
- 如果不考虑求模,根据加密公式很容易想到解密公式应该是x=(y-b)/a
- 因为要求模,除法很可能会得到小数,而小数无法做模运算。
- 解决的方法是将除法转换为乘法。
- a-1称为a的乘法逆元,((y-b)/a)mod26与a-1(y-b)mod26完全等价。
- 仿射密码解密的关键就在于如何求乘法逆元
乘法逆元
- 假设用m表示a的乘法逆元,那么(a*m)mod26 = 1
- a=7,可以写个简单的代码来求m,只要第一个符合条件的值即可:
>>>m=1
>>>while True:
if 7*m%26 == 1:
print(m)
break
m=m + 1
15
- 解密:x=15(y-3)mod26,x=15*14mod26=2,对应的明文为c。
猪圈密码
- 猪圈密码是一种以格子为基础的替代式密码,把英文字母替代成各种图形符号。
- 猪圈密码的变换形式:将下图中的字符左右对应,比如A对应到,D对应到M,T对应到x等。类似题目推荐使用CtfCrackTools这类工具解密。
单表替换
- 替代密码分为单表替换和多表替换两种形式
- 单表替换的加密过程中只有一张密码表,所有的字符都用同样的密码表进行替换。
- 单表替换简单总结:
-
- 明文和密文一一对应。
- 一般有以下两种方式进行破解:
- 在密钥空间较小的情况下,采用暴力破解方式。(凯撒加密)
- 在密文长度足够长的时候,使用词频分析。
- 当密钥空间足够大,而密文长度足够短的情况下,破解较为困难。
多表替换
- 多表替换的加密过程中有张密码表,每个字符分别用不同的密码表进行替换。
- 多表替换的主要优点是解决了单表替换的频率分析问题。
- 比如在凯散密码的基础之上,后来又发展出一种基于密钥的凯撒密码(Keyed Caesar),
- 其基本原理是利用一个密钥,将密钥的每一位转换为数字(一般转化为字母表对应顺序的数字),再分别以这一数字为密钥加密明文的每一位字母。
明文:s0a6u3u1s0bv1a
密钥:guangtou
偏移:6,20.0,13,6,19,14,20
密文:y0u6u3h1y0uj1u
维吉尼亚密码
- 多表替换的典型代表就是维吉尼亚密码。
明文:I love you
密钥:abc
密文:I mqvf aov
费纳姆密码
- 费纳姆密码采用二进制表示,加密时要将明文和密钥都转化成7位的二进制数。
明文:HEELO=1001000 1000101 1001100 1001100 1001111
密钥:CRUDE=1000011 1010010 1010101 1000100 1000101
异或得到密文:0001011 0010111 0011001 0001000 0001010
- 解密时将密文7位为一组,然后与密钥异或,再将结果转换为ASCII码即可。
杰斐逊转轮加密
- 杰弗逊转轮加密器,这个装置有36片同样大小的木制转轮,套在一根铁杆上。每片转轮的圆周边缘上刻有乱序的26个英文字母表。
- 通信双方必须各自拥有一套完全一样的转轮加密器。
- 加密方转动加密器上的转轮,使明文(不超过36字)正好出现在同一行上,这时转轮上排列的其他25行都是无意义的固码,把其中任意一行的固码抄写来,得到密文。
- 接收方收到密文,转动加密器上的转轮,使得密文正好出现在同一行上,然后查看其他25行上的内容,其中有意义的行就是明文。
- 杰斐逊加密器属于典型的“多表替换”加密(每一个转轮就相当于一张替换字母表),它很难被破解,除非能得到通信双方所使用的加密装置。
- 据称美国军队甚至到了20世纪60年代仍然在使用它。这种加密器的缺点是每次只能传送简单的信息(字长不能超过转轮的片数),而且参与通信的各方不能太多。
置换密码
- 与替代密码不同,置换密码并不将明文字符用另一种字符来代替。
- 置换密码的主要思想是改变明文字符的排列方式。
- 保持明文的字符相同,但是重新将字符进行排序,形成新的密文序列。
栅栏密码
- 栅栏密码是把明文分成多个一组,然后把每组的第1个字符连起来,形成一段无规律的字符
明文:Ilovelinux,共有10个字符,可以分为2个一组或是5个一组.
2个一组,得到:Il ov el in ux
先取出每组的第1个字母:loeiu
再取出每组第2个字母:lvlnx
将两组字符连在一起就得到密文:loeiulvlnx
将明文中的2个字符分为一组,故称为2栏
这段明文也可以采用5栏加密,得到密文:Illionvuex
列置换
- 将明文按行填写在一个矩阵中,然后以预定的顺序按列读取得到密文。
- 列置换的密钥通常会以一个单词的形式给出:
- nice 相当于4312
- 按照每个字符在字母表中的前后顺序来排列
- 明文:I love Python and Linux
- 密文:oynLxvtai@Lpodulehnn
列置换加密过程
- 由于密钥一共4位数,所以在加解密时采用的矩阵也为4列。
- 加密时,首先去除明文中的空格,然后依次填入一个4列的矩阵中,最后一行不足的部分可以留空(或者用@等符号补齐),
- 按照密钥的顺序依次读取第1列、第2列、第3列、第4列的数据,得到密文:oynLxvtai@Lpodulehnn
列置换解密过程
- 密文有20个字符,密钥为4位,所以应生成一个4列5行的矩阵。
- 将密文5位为一组,共分为4组:oynLx vtai@ Lpodu lehnn,将每组密文依次填入相应序号的列中。
- 最后再按行读取得到明文。
Polybius密码
- Polybius(波利比奥斯)密码又称为棋盘密码,将给定的明文加密为两两组合的数字
- 明文:HELLO
- 密文:23 15 31 31 34
ADFGX密码
- ADFGX密码可以看作是Polybius密码的升级版,ADFGX密码用A、D、F、G、X 5个字母来代替了Polybius密码中的5个数字。
明文:HELLO
密文:AD DA XXXX DX
- 这是比较常见的密码表,但并不统一
- 常见的形式:将替代与置换结合起来一起用
- 明文:THE QUICK BROWN FOX
- 密文:XF AD DA AF XD XG GA FG XA FX DX GX DG FA DX FF
- 列移位密钥:how are u
- 最终的密文:DXADF AGXF XFFXD FXGGX DGFG AADA ADXXF
- 对于这种密码表,解密的核心:知不知道密码表
- 在此基础上发展出了一个升级版:
- 密文字母增加了V,可以组成一个6*6=36的矩阵
- 明文除了26个英文字母之外,还能容纳10个数字。
- 常见密码表:
标签:加密,Ook,明文,密码,密钥,古典,密文,密码学 From: https://www.cnblogs.com/demo41/p/17750022.html