古典密码学

base 32 特性

base 32是由大写字母跟数字组成、最主要的是没有 0、8、9

键盘布局加密

  • 这是一种比较简单也比较另类的密码,通常都是给出一堆无意义的字符,但是将这些字符按照在键盘上的布局比划一下,就可以根据形状拼出相应字符。

键盘坐标加密

BrainFuck(BF)编码 和 Ook编码

BF密码:+++++++{++++| ---- +><<<<>++++++++--+++} .++++++++++.....-------

Ook编码:Ook?Ook?Ook. Ook! Ook? && ..............!!!!!!?????........ ??!!

替代密码(凯撒、摩斯)

  • 替代密码是指先建立一个替换表,加密时将需要加密的明文依次通过查表,替换为相应的字符,明文字符被逐个替换后,生成无意义的字符串,即密文。

摩斯密码

  1. 美国人艾尔菲德.维斯

    .——. .--- ..- 
    ​
    或
    ​
    0010 0100 1000 0110  //也有可能是摩斯密码转换一下就可以了(使用文本来将1替换为. 0替换- 然后进行解密)

可以斜杠分割也可以空格分割

linux下的python脚本

凯撒密码

  • 凯撒密码是典型的替换密码,加密原理是把明文中所有字母都在字母表中向后(或向前)按照一个固定数目进行移位后替换成密文,而数字和非数字字符则保持不变。

  • 位移数就是凯撒密码的密钥。凯撒密码只有25种可能的密钥,当年凯撒用的密钥是3。

软件:CTFCrakTolls跟图片颜色差不多。

ROT13密码

  • ROT13的密文和明文互为逆反,也就是说要还原ROT13,使用与加密同样的算法即可,故同样的操作可用于加密与解密。‘

回旋十三踢

ASCLL

  • 是基于凯撒密码的基础之上的一个移位密码,移位密码不仅会处理字母,还可能处理数字和特殊的字符,所以常用的ASCLL码表进行移位。

奇怪的密码

变异凯撒

例1:

例2:(看后面的A的编码是64 =的编码是 61。先用凯撒解码将密文的编码后移6位得到 base64解码的密文,如何进行base64解码)

单表替换(凯撒密码改进)

凯撒密码是有25种解码方式,而他有26种。而且字母是随机排列的。

词频分析:英语中出现的平均频率来推测他的顺序。在CTF题目中,如果给出比较长的密文,那么很可能使用词频分析的方法来破解。

解密线下工具:WinDecrypto

培根密码

特性:培根密是一种简单的替换密码,密文字符只有两个:a和b,每个明文字符的都会被替换为一个由 a 和 b 组成的长度为5的字符串。

  • 比如明文h被替换后和密文为aabbb。

  • 密文字符也可以选择任意两个其他字符.

  • 如果看到这种全部由两个字母组成的密文,那么就可以猜测为可能是培根密码。

培根密码表

灵活引用有 python

# 将_去掉
>>> 'aaaa_bbbbb_aaaa'.replace('_','')
'aaaabbbbbaaaa'
# 将小写换位大写
>>> 'aaaabbbbbaaa'.upper()
'AAAABBBBBAAA'
​
# 将不是 AB 的字母替换为 AB
>>> a='DCCCDDDDDDDDDDDDCCCCCDCDCCCCCCCDDDDD'
>>> table = ''.maketrans('CD','AB')
>>> a.translate(table)
'BAAABBBBBBBBBBBBAAAAABABAAAAAAABBBBB'
​
# 将一段大小写不一样的英文改为只有 ab 的这种培根密码(就是将 a 里的大写字母改为 a 、小写的字母改为b)
>>> a = "Hookl'fSljihiiaAFUIjlkjiaojaLIA'" 
>>> flag = ''
>>> for i in a:
...     if i.isupper():
...             flag = flag + 'a'
...     elif i.islower():
...             flag = flag + 'b'
... 
>>> flag
'abbbbbabbbbbbbaaaabbbbbbbbbaaa'

实践

  1. 有些题目会将培根密码进行二次加密,加一个凯撒密码啥的,解码之后会发现后面不 AB 是别的两个字母那就将他替换掉使用培根解密。

  2. 培根有些题需要去掉下划线,提交 flag 的时候需要加上下划线。

放射加密

  • 凯撒密码是将明文与密钥相加得到的密文,防射密码则是将明文与密钥的一部分相乘,然后再加上密钥的另一部分。

  • 为了便于计算,将26个英文字母用数字表是:a = 0,b = 1 ...... z = 24。

  • 仿射加密的密钥有两个:a和b,取值范围都是[0,25]。

  • a 要求与 26 互质,互质就是这两个数的公因数只有1。

    • 26 的因数:1,2,13

    • a 的因素不包含2或13即可。

放射加密原理

仿射解密

例:(乘法逆元)

已知仿射加密变换为 c=(11m+7)mode26,试对密文 dikxourxd 解密。

方法一

解:由题可知 a=11 b=7 (先求出 a 的乘法逆元)

# 求 a 的乘法逆元
>>> m = 1
>>> while True :
...     if 11*m%26 == 1:
...             print(m)
...             break
...     m = m + 1
... 
19

那么解密的公式就有了 (y-7)*19%26 将密文的英文字母转换为数值代入即可

>>> mi = 'dikxourxd'
>>> for i in mi:
...     print(chr(97+(ord(i)-97-7)*19%26),end='')
... 
ctfsdnisc>>> 
答案就出来了 ctfsdnisc

方法二

属于暴力破解

>>> mi = 'dikxourxd'
>>> for i in mi:
...     for j in range(0,26):
...             if (11*j+7)%26 == ord(i)-97:
...                     print(chr(97+j),end='')
... 
ctfsdnisc>>>

调用这个库需要 Python2

猪圈密码

(11条消息) 简单猪圈解码_花花日常生活的博客-CSDN博客

CTFCrakTools 软件

上面全是单表替换下面是表替换

维吉尼亚密码

脚本

费纳姆密码

实例

Python 解题
>>> txt = '00000000000000000000000000000000000000000000000000000000000000000101110000110001000000101000000001' 
>>> mi = []
>>> for i in range(0,len(txt),7): 
...      mi.append(txt[i:i+7])
... 
>>> key = 'WELCOMETOCFF'
>>> for m,n in zip(mi,key):
...     print(m,n)
... 
0000000 W
0000000 E
0000000 L
0000000 C
0000000 O
0000000 M
0000000 E
0000000 T
0000000 O
0010111 C
0000110 F
0010000 F
>>> for m,n in zip()
  File "<stdin>", line 1
    for m,n in zip()
                   ^
SyntaxError: invalid syntax
>>> for m,n in zip(mi,key):
...       print(chr(int(m,2) ^ ord(n)),end='')
... 
WELCOMECISRG>>> 

杰斐逊转轮加密

杰斐逊解码器,是由36个解码同样大小的木质转轮,套在一根铁杆上。每片转轮的周围边缘上刻有乱序26因为字母表。

置换密码

  • 置换密码的主要思想是改变名为字符的排列方式

  • 保持铭文字符相同,但是重新将字符进行排序,形成新的字符

栅栏密码

栅栏密码是吧铭文分成n个一组,然后把每组的第一个字符链接起来,形成无规律的字符。

明文:Ilovelinux 共有10个字符,可以分为2个一组或者文5个一组(也就是吧民文整除后得到的栅栏数)

使用kali进行图片分析

file +文件名    //查看是那种文件类型
exif +文件名    //查看exif文件信息
binwalk +文件名  //查看是否有隐藏文件
strings +文件名 | grep -i flag   //查看文件内容
strings +文件名        //....

列置换加密过程

加密过程

解密过程

使用Python 2库来进行加解密

Polybius密码

ADFGX密码

最常见的ADFGX密码解密步骤

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值