系列文章目录

本系列开篇文章,就没有链接了。

文章目录

  • 系列文章目录
  • 前言
  • 一、编码/解码
    • 1.1 BrainFuck密码&ook!密码
    • 1.2 URL编码&HTML实体编码
    • 1.3 Unicode编码&XXencode编码&AAencode编码&Quoted-Printable编码
    • 1.4 base家族
    • 1.5 社会主义核心价值观编码
  • 二、古典密码
    • 2.1 移位密码
      • 2.1.1 曲路密码
      • 2.1.2 云影密码
    • 2.2 栅栏密码
    • 2.3 培根密码&摩斯密码
    • 2.4 九宫格密码&键盘密码
    • 2.5 夏多密码&猪圈密码&当铺密码&盲语
    • 2.6 博多密码
    • 2.7 Rabbit密码&Rot13密码
    • 2.8 希尔密码
    • 2.9 凯撒编码
    • 2.10 维吉尼亚密码
    • 2.11 棋盘密码&键盘棋盘密码
  • 三、对称密码
    • 3.1 DES
    • 3.2 AES
  • 四、非对称密码
    • 4.1 RSA

前言

以前在上大学的时候,经常听老师在专业介绍上讲物联网安全,大学期间眼光短浅总对网络安全提不起兴趣,一是当时我觉得网络安全对我太抽象,二是当时我的方向不在这一块。直到今年七月份,我在准备另一场计算机比赛的时候无意间接触到了CTF竞赛,其中最开始接触的是杂项,但由于太过杂乱就暂时先不整理,但是杂项中的推理深深的吸引了我(当时刚学了逻辑,沉迷于推理),于是开始接触CTF,当然我也是野路子出身,没有系统地学习过网络安全,所以难免有很多错误,大佬们想喷就喷,我看到书上写道:“边学习基础知识,边去参加线上赛,在比赛中学习,然后在比赛后整理题目,就可以快速学习。于是我前几天参加了几个简单线上赛,虽然很多题目不会,但是边搜边学,还是学到了很多东西,于是开这个坑来记录一下这些简单题的思路和使用的工具,以备不时之需。欢迎各位大佬指导。如果有侵犯您的权利,请联系我删除这篇文章。
我主要参考的书籍是:
《CTF安全竞赛入门》《CTF特训营》
(刚入门而且我没有计算机基础(准确说是忘了,现在的计算机基础只剩当年写简单操作系统内核的时候学的一点操作系统和前几天复习的python还有以前参赛经验学的单片机的一点点知识)所以还没有看更具体的书)
题目来源:
各种线上赛,bugku等。

一、编码/解码

1.1 BrainFuck密码&ook!密码

这两者都是极小化的计算机语言,比较好识别。比如BrainFuck密码是由“>”、“<”、“+”、“-”、“.”、“,”、“[”、“]”组成,而ook密码典型的是含有大量ook,但是也出现了一种短ook的密码,具体题目会有暗示或者一堆标点符号。
ook类在线解密:https://www.splitbrain.org/services/ook

1.2 URL编码&HTML实体编码

URL编码这个我很早很早以前在刚学完十六进制分析文件时候就遇到过,可惜当时没学过,,URL的编码风格是“%+十六进制数值”,在线工具解码即可
HTML编码识别特征是“&#+数值”,在线工具或Converter转换即可

1.3 Unicode编码&XXencode编码&AAencode编码&Quoted-Printable编码

(1)Unicode编码:这类题的识别特征是“\u+四位数字”,这个识别出是Unicode后用编码工具Unicode解码就解决了
(2)XXencode编码:这种题我只见过一次,并且有提示是XXencode,所以我暂时还没想到识别办法
(3)AAencode编码:AAencode编码太好识别了,这个就是颜文字~~(⊙o⊙)?~~,书上说将密文放到浏览器的控制台中回车得到明文,我也没试过嘻嘻(偷懒)
但在此mark一个题,我在一次线上赛中遇到过不是颜文字,而是表情符号emoji的编码,这个题没留下原题,而且也没解出来,若我以后再遇到这种题再回来更新
(4)Quoted-Printable编码:这个识别是密文有大量的等于号,并且每个等于号后面大概率有两个字符,使用工具解码即可,还没遇见这样的题,遇到再说

1.4 base家族

这个稍微复杂点,等我学完原理再来掰扯(我太菜了)
————————————————————————
2022.10.26
之前在线上赛发现了一个特别好使的base脚本,可以破解base16,32,64,91,92(没记错的话),下面是链接:
https://download.csdn.net/download/zss192/12133420?utm_medium=distribute.pc_relevant_download.none-task-download-2defaultBlogCommendFromBaiduRate-3-12133420-download-16675859.topnsimilar_compare_v2&depth_1-utm_source=distribute.pc_relevant_download.none-task-download-2defaultBlogCommendFromBaiduRate-3-12133420-download-16675859.topnsimilar_compare_v2&dest=https%3A%2F%2Fdownload.csdn.net%2Fdownload%2Fzss192%2F12133420&spm=1003.2020.3001.6616.3
其中有一点小问题,就是Import导入base92python3可能会遇到一些问题,python3.10似乎没有easy_install,之后Windows下的安装可能会遇到文件夹无权限的情况,所以需要设置文件夹权限,而Linux下也会遇到这种情况,但是文件夹权限相比Windows似乎简单的多,cmd或终端提示哪个文件夹没啥权限参考设置文件夹权限
ps:我在Windows下安装包没有成功,但在Kali中安装成功了

1.5 社会主义核心价值观编码

这个太好识别,学过社会主义核心价值观的一眼就能看出,其就是社会主义核心价值观的词组成的密文,在线工具解码即可

二、古典密码

2.1 移位密码

如果题目给出一个字符串,但字符串依稀能够看出flag{}(得益于语言打乱后也能正确阅读233333),需要考虑是否是移位密码。移位密码写一个python脚本解决:
代码出自《CTF安全竞赛入门》,书上运行环境是python2,我稍微修改了一下变成了python3环境下运行的,但代码不是我写的。

import mathciphertext = ''key = 14numro = key
numcol = round(len(ciphertext)/key)
numshado = (numcol * numro) - len(ciphertext)
plaintext = ['']*int(numcol)col = 0
ro = 0for symbol in ciphertext:plaintext[col] += symbolcol += 1if(col == numcol) or (ro >= numro - numshado):col = 0ro += 1print(''.join(plaintext))#THE FLAG YOU ARE LOOKING FOR IS FD3VDUF1SK3U..

这里的字符串是我在一个线上赛里面遇到的,但是否有后一步我暂时不清楚(我太菜了),但是我大致猜了猜是有后一步的。
——————————————————————————————————————————
2022.10.26

2.1.1 曲路密码

明文填入一个表中,并按照一定的曲路遍历,是移位密码的一种

2.1.2 云影密码

云影密码仅包含01248五个数字,其中0用于分割字符,其余数字用于做加和操作之后转换为明文

2.2 栅栏密码

题目一般会提示栅栏(比如栏杆啊等等,因为栅栏解密需要一个栏杆数),解栅栏密码可以用线上工具,似乎难度不大,但主要是考脑洞,能不能想到这一点,与之类似的还有希尔(Hill)解密(bugku上就有一道题的标题叫小山丘23333333)。
栅栏解密在线工具:https://ctf.bugku.com/tool/railfence
也有线下的工具,我看bugku评论在喷在线工具,可能我解这个题的时候没有遇到啥bug吧。

2.3 培根密码&摩斯密码

lei了lei了,各种奇奇怪怪的题出现了。培根密码是一种替换密码,每个明文字母被一个五个字符组成的序列表示。最初的方式是A和B两个字符组成(二元字符,5个长度),这个有点类似常见的摩斯密码(点和杠),但摩斯密码并不是固定5个长度。因此出现二元化的字符(比如两种字母,字母大小写)和5的倍数长度的字符串,要考虑培根密码,题目一般也会给出提示。
比如在一次线上赛,我在晃悠着找签到题,但是每个密码学的题目看了看都很复杂(我看到了RSA的简单题,虽然有固定思路但是懒得动233333333),偶然间我打开了一个题,看到了字符串是5个5个一组,两种字母组成,嘿这不就是典型的培根密码吗,解出flag后提交flag时发现,这题叫作breakfast(早餐)哈哈哈哈哈哈原来暗示在这。
当然上述题目是最简单的签到题,还有稍微增加一点点点难度的(没别的意思就是稍稍修改了一下),你会发现是5个字符组成字符串,很明显的培根密码,但是你对照密码表发现解不出来,因为出题人把两种字符倒过来了,比如AAAAB变成了BAAAA,这时如果懒的话直接写个脚本解决就好。
还有一类脑洞比较大的题,比如:
可以看到只有一个链接,但这个链接藏着一个密码(这个题我稍微简化了一下),但是怎么看也没看出有什么特征。
但是将链接中的标点去掉后,链接会变成一个字符串HttPpcatcnbloGscOMHh,字符串正好是5的倍数,而且大小写正好是二元化,于是联想到培根密码,大写字母作B,小写字母作A,解密后得到密码。

摩斯密码这个可太出名了,没啥好讲的,直接在线解密工具:http://www.all-tool.cn/Tools/morse/?&rand=e68158465290e3180b7e7091c14e36d4

2.4 九宫格密码&键盘密码

手机的数字键盘和九宫格输入的结合,通过两个数字定位到具体字符。这种密码的发现主要题目中都会暗示密码和手机相关。与之相似的还有键盘密码,也会提示密码和键盘相关。手机九宫格和键盘解密直接对照密码表,当然可以斩草除根的用脚本一劳永逸。

2.5 夏多密码&猪圈密码&当铺密码&盲语

这一类密码特征十分明显,因为都是图形类解密。这个大家自己百度一下搜索一下图吧,基本都是图形密码。
音符密码在线解密:https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=yinyue
盲语密码在线解密:https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=mangwen
猪圈密码在线解密:http://www.metools.info/code/c90.html

2.6 博多密码

这个密码是我在做bugku的题的时候发现的,当时题目提示说是一种5bit的密码,我当时有点懵,快速回忆了一下我看过的密码,与5相关的似乎只有培根,但是很明显题目给出的字符串不是二元化的字符组成的,于是百度一下原来还有一种5位的密码博多密码。
在线解密工具:https://www.boxentriq.com/code-breaking/baudot-code

2.7 Rabbit密码&Rot13密码

两者都需要题目提示(比如暗示兔子之类的),之后在线解密,rot13可能提示比较特殊,rot13是加密移动13位解密移动13位。
Rabbit在线解密:http://www.wetools.com/rabbit/

2.8 希尔密码

希尔密码是需要一个矩阵来解密的,所以希尔密码的出现会有一个矩阵,这个稍稍复杂一些,需要一个脚本解密:

#!/usr/bin/env python
# -*- coding: utf-8 -*-from numpy import *
Dic = {chr(i+97):i for i in range(26)}
def decode(pwd, org):temp = []result = []while True:if len(pwd) % 3 != 0:pwd.append(pwd[-1])else:breakfor i in pwd:temp.append(Dic.get(i))temp = array(temp)temp = temp.reshape(int(len(pwd)/3), 3)#print temp#print orgxx = matrix(temp)*orgfor j in range(int(len(pwd)/3)):for i in range(3):if (int(xx[j, i]) >= 26):result.append(chr(xx[j, i] % 26 + 97))#print xx[j, i] % 26else:#print xx[j, i]result.append(chr(xx[j, i] + 97))return result
def get_vmatrix(org):org_adjoin = org.I*linalg.det(org)#print org_adjoinorg_det = int(str(abs(linalg.det(org))).split('.')[0])#print org_detfor i in range(1, 26):if i * org_det % 26 == 1:breakorg_mod = -org_adjoin * i % 26org_mod = matrix(org_mod)temp = []for i in range(org_mod.shape[0]):for j in range(org_mod.shape[1]):temp.append(int(str(org_mod[i, j]).split('.')[0]))org_final = matrix(temp).reshape(org_mod.shape[0], org_mod.shape[1])#print org_finalreturn org_final
if __name__ == '__main__':#pwd = ""  这里实际是要写的,但是这里注释是因为不注释发不出来pwd = list(pwd)org = matrix(array([[1,2,3],[4,5,6],[7,8,9]]))org_vm = get_vmatrix(org)#print org_vmprint("Your flag is :" + "".join(decode(pwd, org_vm)))

2.9 凯撒编码

2.10 维吉尼亚密码

2.11 棋盘密码&键盘棋盘密码

三、对称密码

3.1 DES

3.2 AES

四、非对称密码

4.1 RSA

如果是简单应用,这里可以参考这篇blog,写的通俗易懂:
https://www.cnblogs.com/wwcdg/p/15913896.html
更为复杂的等我学一下数学基础再掰扯
————————————————————————————————
2022.10.26
RSA实在有点复杂,还是太多分解组合方法了,出题人俄罗斯套娃一样,针对更多位大数有费马分解等方法,而e较小时还有小指数明文爆破,还有公约数模数分解

CTF Crypto简单题学习思路总结(持续更新)相关推荐

  1. CTF MISC图片隐写简单题学习思路总结(持续更新)

    系列文章目录 第一篇文章: CTF Crypto简单题学习思路总结(持续更新) 文章目录 系列文章目录 前言 一.JPG类隐写 1.1 JPG文件末尾添加字符串 1.2 JPG文件中添加字符串 1.3 ...

  2. CTF MISC压缩包简单题学习思路总结(持续更新)

    系列文章目录 太复杂了,已经懒得写目录了,怎么我自己分了这么多篇CTF简单题思路总结啊,我真是太菜了,各位大佬有兴趣可以去分类专栏看一看 文章目录 系列文章目录 前言 一.压缩包识别/修复 二.压缩包 ...

  3. CTF MISCword隐写简单题学习思路总结(大概率不会持续更新)

    系列文章目录 好复杂的说,懒得列了说 文章目录 系列文章目录 前言 一.反白 二.word自带隐藏字符 三.word文件本质 四.word字体隐写 前言 前几天参加了HNCTF,其中遇到了不少题可以检 ...

  4. CTF MISC在我眼里各种奇奇怪怪的题学习思路总结(持续更新)

    系列文章目录 MISC:图片隐写简单题学习思路总结(持续更新) CTF Crypto简单题学习思路总结(持续更新) 文章目录 系列文章目录 前言 一.二维码 1.1 QR码 1.2 Maxicode码 ...

  5. Go语言开发学习笔记(持续更新中)

    Go语言开发学习笔记(持续更新中) 仅供自我学习 更好的文档请选择下方 https://studygolang.com/pkgdoc https://www.topgoer.com/go%E5%9F% ...

  6. 网络流题目详讲+题单(提高版)(持续更新中......)

    网络流题目详讲+题单(提高版)(持续更新中......) 标签:图论--网络流 PS:如果你觉得自己还不够强(和我一样弱),可以去入门版看看 阅读体验:https://zybuluo.com/Junl ...

  7. 微服务基础知识点学习笔记(持续更新)

    微服务基础知识点学习笔记(持续更新) Conrtoller层 整体包括:HTTP协议,JavaWeb三大组件(filter.servlet.listener).SpringMVC(SpringMVC的 ...

  8. 牛客网Veirlog刷题答案目录(持续更新)

    牛客网Veirlog刷题答案目录(持续更新) 基础篇 进阶篇 基础篇 1.VL1--四选一多路选择器 2.VL2--异步复位的串联T触发器 3.VL3--奇偶校验 4.VL4--移位运算与乘法 5.V ...

  9. NumPy个人学习笔记【持续更新】

    NumPy个人学习笔记[持续更新] 来源:快速入门教程 - NumPy中文文档 目录 基础知识 数组的创建 打印数组 基本操作 通用函数 索引.切片和迭代 形状操作 更改数组的形状 将不同数组堆叠在一 ...

最新文章

  1. phpcms调用栏目描述_phpcms v9栏目列表调用每一篇文章内容方法
  2. Java IO流 、 Properties 、 枚举
  3. 【文末有福利】艺术创造规则,而不是规则创造艺术
  4. netty中的引导Bootstrap服务端
  5. Python基础----日期时间
  6. Linux多线程工作笔记0003---C语言中%p,%u,%lu都有什么用处
  7. 在C#中获取如PHP函数time()一样的时间戳
  8. python基础教程免费下载-《Python机器学习基础教程》高清版免费PDF下载
  9. FFmpeg源代码结构图 - 编码
  10. opus在arm的嵌入式平台上的移植和开发
  11. Mac 屏幕可不可以用酒精清洁?正确清洁 Mac 的方法
  12. [算法题] 安排会议室——贪心算法的应用
  13. 2015年9月29笔试总结
  14. TextView实现水平滚动
  15. 欧姆龙PLC网关BL110之41:实现欧姆龙 PLC 接入Modbus TCP 云平台
  16. linux启动db2的命令窗口_linux下如何启动db2数据库命令窗口
  17. MySQL:count(*) count(字段) 实现上区别
  18. checking for gcc... no
  19. elementUi基础入门学习
  20. JM(264)基础知识整理

热门文章

  1. Android 禁止键盘弹出 关闭键盘 禁用键盘 禁用输入法 关闭输入法
  2. 你的年龄体重身高,最好别对这款 app 撒谎
  3. 今日小程序推荐:动态壁纸-你专属壁纸!
  4. 文华财经指标公式大全,通达信指标加密破解DLL加密防破解技术方法
  5. Ruby中按照指定编码读取文件
  6. 县城中学计算机教师就业难吗,我县中小学信息技术教师现状及对策
  7. android 摄像头测血压,自拍测血压的手机软件来了!准确率高达95%!
  8. Mongodb std::exception::what(): basic_filebuf::underflow error reading the file: iostream error
  9. Python绘图笔记
  10. “拓维元”震撼发布,拓维信息软硬全栈国产自研战略再落一子!