CTF——密码学

郎贤坤   ·   发表于 2022-04-26 22:02:23   ·   学习杂记

古典密码

凯撤密码

1.原理:
凯撒密码(Caesar)加密时会将明文中的 每个字母 都按照其在字母表中的顺序向后(或向前)移
动固定数目(循环移动)作为密文。例如,当偏移量是左移 3 的时候(解密时的密钥就是 3)
使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表
中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ

明文密码表:#### A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文密码表:####
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

移位密码

与凯撒密码类似,区别在于移位密码不仅会处理字母,还会处理
数字和特殊字符,常用 ASCII 码表进行移位。其破解方法也是遍
历所有的可能性来得到可能的结果

A t b a s h C i p h e r 埃 特 巴 什 码

原理
埃特巴什码(Atbash Cipher)其实可以视为下面要介绍的简单替换密码的特例,它使用字母表
中的最后一个字母代表第一个字母,倒数第二个字母代表第二个字母。在罗马字母表中,它是这样
出现的:
明文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文:Z Y X W V U T S R Q P O N M L K J I H G F E D C B A

例子:
明文:the quick brown fox jumps over the lazy dog
密文:gsv jfrxp yildm ulc qfnkh levi gsv ozab wlt
工具:http://www.practicalcryptography.com/ciphers/classical-era/atbash-cipher/

简 单 替 换 密 码

原理
简单替换密码(Simple Substitution Cipher)加密时,将每个明文字母替换为与之唯一对应且不同
的字母。它与恺撒密码之间的区别是其密码字母表的字母不是简单的移位,而是完全是混乱的,这也使得
其破解难度要高于凯撒密码

明文字母 : abcdefghijklmnopqrstuvwxyz
密钥字母 : phqgiumeaylnofdxjkrcvstzwb
a 对应 p,d 对应 h,以此类推。

例子:
明文:the quick brown fox jumps over the lazy dog
密文:cei jvaql hkdtf udz yvoxr dsik cei npbw gdm

而解密时,我们一般是知道了每一个字母的对应规则,才可以正常解密。

破解:由于这种加密方式导致其所有的密钥个数是26! ,所以几乎上不可能使用暴力的解决方式。所以我们 一般采用词频分析。

工具¶:http://quipqiup.com/

P l a y f a i r 普 来 费 尔

l a y f a i r 普 来 费 尔
原理
Playfair 密码(Playfair cipher or Playfair square)是一种替换密码,1854 年由英国人
查尔斯·惠斯通(Charles Wheatstone)发明,基本算法如下:
1、选取一串英文字母,除去重复出现的字母,将剩下的字母逐个逐个加入 5 × 5 的矩阵内,剩
下的空间由未加入的英文字母依 a-z 的顺序加入。注意,将 q 去除,或将 i 和 j 视作同一字。
2、将要加密的明文分成两个一组。若组内的字母相同,将 X(或 Q)加到该组的第一个字母后,
重新分组。若剩下一个字,也加入 X 。
3、在每组中,找出两个字母在矩阵中的地方。
a. 若两个字母不同行也不同列,在矩阵中找出另外两个字母(第一个字母对应行优先),使这四
个字母成为一个长方形的四个角。
b.若两个字母同行,取这两个字母右方的字母(若字母在最右方则取最左方的字母)。
c.若两个字母同列,取这两个字母下方的字母(若字母在最下方则取最上方的字母)。
d.新找到的两个字母就是原本的两个字母加密的结果

以 playfair example 为密匙,得
P L A Y F
I R E X M
B C D G H
K N O Q S
T U V W Z
明文: Hide the gold in the tree stump
HI DE TH EG OL DI NT HE TR EX ES TU MP

密文:BM OD ZB XD NA BE KU DM UI XM MO UV IF

P o l y b i u s 棋 盘 密 码

原理
Polybius密码又称为棋盘密码,其一般
是将给定的明文加密为两两组合的数字,
其常用密码表,举个例子,明文 HELLO,
加密后就是 23 15 31 31 34。

A D F G X


例如:
明文:HELLO
密文:DD XF AG AG DF

V i g e n e r e 维 吉 尼 亚 密 码

原理
维吉尼亚密码(Vigenere)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一
种简单形式。

例子:
明文:come greatwall
密钥:crypto
密文:efkt zferrltzn

N i h i l i s t 关 键 字 密 码

原理¶
a.Nihilist密码又称关键字密码:明文 + 关键字 = 密文。以关键字 helloworld 为例。
b.首先利用密钥构造棋盘矩阵(类似 Polybius 密码) - 新建一个 5 × 5 矩阵 - 将字符不重复
地依次填入矩阵 - 剩下部分按字母顺序填入 - 字母 i 和 j 等价
对于加密过程参照矩阵 M 进行加密:
a -> M[2,3] -> 23
t -> M[4,5] -> 45
Ø 对于解密过程
参照矩阵 M 进行解密:
23 -> M[2,3] -> a
45 -> M[4,5] -> t
可以看出,密文的特征有如下几点
• 纯数字
• 只包含 1 到 5
• 密文长度偶数

A u t o k e y C i p h e r 自 动 密 钥 密 码

原理
自动密钥密码(Autokey Cipher)也是多表替换密码,与维吉尼亚密码密码类似,但使用不同
的方法生成密钥。通常来说它要比维吉尼亚密码更安全。自动密钥密码主要有两种,关键词自动
密钥密码和原文自动密钥密码。下面我们以关键词自动密钥为例:
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
关键词:CULTURE
自动生成密钥:
CULTURE THE QUICK BROWN FOX JUMPS OVER THE
接下来的加密过程和维吉尼亚密码类似,从相应的表格可得:
密文
VBP JOZGD IVEQV HYY AIICX CSNL FWW ZVDP WVK

其他类型加密

栅 栏 密 码

栏栅栏密码原理:
明文:Day is a lovely day
去掉空格后变为:Dayisalovelyday
分组(2个一组):Da yi sa lo ve ly da y
第一组(取第一个字符):Dyslvldy
第二组(取第二个字符):aiaoeya
连在一起即为密文:Dyslvldyaiaoeya
7栏栅栏密码原理就是分为7个一组,然后组合。
破解栅栏密码,首先需要先明确是几栏栅栏密码加密,然后进行破解。

曲 路 密 码

曲路密码(Curve Cipher)是一种换位密码,需要双方事先约定密钥(也就是曲路路径)
原理:
明文:Your happiness often in the eyes of others
密文:soynfnh rioiefr eoenspu opsehsh tetteaY
破解曲路密码,首先需要先明确表填充的几行几列曲路密码加密,然后进行破解。

埃 特 巴 什 码

埃特巴什码(Atbash Cipher)是一种以字母倒序排列作为密钥的替换加密
埃特巴什码原理:

ABCDEFGHIJKLMNOPQRSTUVWXYZ

ZYXWVUTSRQPONMLKJIHGFEDCBA

明文:Your happiness often in the eyes of others
密文:Blfi szkkrmvhh lugvm rm gsv vbvh lu lgsvih

**#### R O T 5 / 1 3 / 1 8 / 4 7" class="reference-link">## **#### R O T 5 / 1 3 / 1 8 / 4 7

ROT5/13/18/47加密是一种替换加密,它具有可逆性。ROT5/13/18/47是rotate by
5/13/18/47places的简写,意思是旋转几个位置。

ROT5:

只对数字进行编码,用当前数字往前数的第五个数字替换当前数字。比如当
前数字为0,替换后就变成5;当前数字为1,替换后就变成6;以此类推顺序循环。

ROT13:

只对字母进行编码,用当前字母往前数的第十三个字母替换当前字母,比如
当前字母为A,替换后变成N;当前字母为B,替换后就变成O;以此类推顺序循环。

ROT18:

它的编码规则是将ROT5和ROT13的编码规则组合在一起,比如当前明文是A0,
替换后就变成N5;当前明文是B1,替换后就变成O6;以此类推顺序循环。
ROT47;

对数字、字母、常用符号进行编码,按照它们的ASCII码值进行位置替换,

用当前字符ASCII值往前数的第47位对应字符替换当前字符,比如当前为小写字母z,
工具:https://www.qqxiuzi.cn/bianma/ROT5-13-18-47.php

简 单 换 位 密 码

简单换位密码(Simple Substitution Cipher),它的加密方法是每个明文字
母都被唯一且不同的字母替换。它的密码字母表的字母不是简单的移位,而是完
全是混乱的

明文:Your happiness often in the eyes of others
字母对应关系:
明文字母:abcdefghijklmnopqrstuvwxyz
密文字母:phqgiumeaylnofdxjkrcvstzwb
密文:
破解简单换位密码,当密文数据足够多时可以通过字频分析方法破解或其他方
法破解。

希 尔 密 码

希尔密码(Hill Cipher)是基于线性代数多重代换密码。每个字母转换成26进
制数字:A=0,B=1,C=2…Z=25一串字母当成n维向量,跟一个n*n的矩阵相乘,再
将得出的结果MOD26
明文:ACT
明文对应方阵:



加密密钥:GYBNQKURP
加密矩阵:


计算过程:


python解密代码 import numpy as np m = 'ACT' #明文 a = np.matrix([[5,24,1],[13,16,10],[20,17,15]]) #密钥GYBNQKURP num_m = [] temp = [] count = 1 for i in m: #将明文分为三个一组 temp.append(ord(i)-ord('A')) if count % 3 == 0: num_m.append(temp) temp = [] count += 1 mat_m = [np.matrix(i).T for i in num_m] #将明文分组转换为向量形式 mat_c = [a * i % 26 for i in mat_m] #得到密文分组的向量形式 num_c = [] temp = [] for i in mat_c: #将密文向量转换为列表形式,且合并到一个列表 temp = i.tolist() for j in range(3): num_c.append(temp[j][0]) c = [chr(i+ord('A')) for i in num_c] print(''.join(c)) #连接成字符串,输出密文

猪圈密码

猪圈密码(Pigpen Cipher或称九宫格密码、朱高密码、共济会密码、共济会员密码),是一种
以格子为基础的简单替代式密码
密码表

标 准 银 河 字 母

圣 堂 武 士 密 码 ( Te m p l a r C i p h e r )

圣堂武士密码(Templar Cipher)是共济会的“猪圈密码”的一个变种,一直被共济会圣殿骑士用。
明文字母和对应密文

变 种 密 码

明文字母和对应密文:

波 利 比 奥 斯 方 阵 密 码

介绍
波利比奥斯方阵密码(Polybius Square Cipher或称波利比奥斯棋盘)是棋盘密码的一种,是
利用波利比奥斯方阵进行加密的密码方式,简单的来说就是把字母排列好,用坐标(行列)的形式
表现出来。字母是密文,明文便是字母的坐标。更多 参考
常见的排布方式


实例:
明文: THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密文: 442315 4145241325 1242345233 213453 2445323543 442315 31115554 143422

未完待续……

打赏我,让我更有动力~

2 条回复   |  直到 2022-5-12 | 1478 次浏览

君叹
发表于 2022-4-27

简单替换密码中那个密钥个数不是26个,可能想表达的意思是不像凯撒一样远远不止26个密钥,但是写错了

评论列表

  • 加载数据中...

编写评论内容

ZKAQ-枫
发表于 2022-5-12

这是宇哥吗

评论列表

  • 加载数据中...

编写评论内容
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.