CTF学习笔记-crypto的一些总结(未完待续)
总结了一下CTF中常见的一些密码学crypto的题以及相关加解密网站
- 关键词:MISC、crypto
先放点干货-几个比较全的网站:
- http://ctf.ssleye.com/
- https://tool.oschina.net/
- http://www.atoolbox.net/Category.php?Id=27
- https://ctf.bugku.com/tools
Base加密
- Base64
特征:
(1)标准base64只有64个字符(英文大小写、数字和+、/)以及用作后缀等号
(2)经过base64编码后的字符串长度一定会被4整除(包括后缀等号)
(3)等号用作后缀,且数目一定是0个、1个或2个。这是因为如果原文长度不能被3整除,base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号。添加等号的数目只能是0、1或2
例如:
flag{this_is_a_flag}
加密后:
ZmxhZ3t0aGlzX2lzX2FfZmxhZ30=
解密:
(1)在线工具:https://tool.oschina.net/encrypt?type=3
(2)python解密:
import base64
print base64 decodestring(‘xxxxxxxx’)
- Base32
特征:
只有大写字母A-Z和数字234567
例如:
flag{this_is_a_flag}
加密后:
MZWGCZ33ORUGS427NFZV6YK7MZWGCZ35
解密:
在线工具:http://www.atoolbox.net/Tool.php?Id=931
- Base16
特征:
只有大写字母ABCDEF和数字0-9
例如:
flag{this_is_a_flag}
加密后:
666C61677B746869735F69735F615F666C61677D
解密:
在线工具:http://www.atoolbox.net/Tool.php?Id=930
- Base100
特征:?
例如:
flag{this_is_a_flag}
加密后:
👝👣👘👞👲👫👟👠👪👖👠👪👖👘👖👝👣👘👞👴
- Base64图片加密
特征:
(1)一般来说非常的长。因为图片一般来说比较大(
(2)以“data:image/jpeg;base64,********************”开头,里面的jpeg是文件格式,也可以是png什么的
解密:
在线解密:http://www.jsons.cn/img2base64/
- 其他:
比如Base92、91、85、62、58等等
古典密码
- 凯撒密码
特征:
(1)符号不会变。
(2)是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。
例如:
flag{this_is_a_flag}
偏移量为5 加密后:
kqfl{ymnx_nx_f_kqfl}
解密:
在不确定偏移量的情况下,可以遍历,然后找里面有比如“***ctf”这种关键字。
在线解密:https://ctf.bugku.com/tool/caesar
衍生——维吉尼亚密码
在线解密:https://ctf.bugku.com/tool/vigenere
- 栅栏密码
所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)
栅栏密码的加密首先把将要传递的信息中的字母交替排成上下两行,然后将下面一行字母排在上面一行的后边,从而形成一段密码。
例如:
flag{this_is_a_flag}
栏数5 加密后:
ftiflhslai_agsag{__}
解密:
在不确定栏数的情况下,可以尝试遍历,然后找关键字。
在线解密:https://ctf.bugku.com/tool/railfence
- Uuencode密码
Uuencode将输入文字以每三个字节为单位进行编码,如此重复进行。如果最后剩下的文字少于三个字节,不够的部份用零补齐。这三个字节共有24个Bit,以6-bit为单位分为4个群组,每个群组以十进制来表示所出现的数值只会落在0到63之间。将每个数加上32,所产生的结果刚好落在ASCII字符集中可打印字符(32-空白…95-底线)的范围之中。
Uuencode编码每60个将输出为独立的一行(相当于45个输入字节),每行的开头会加上长度字符,除了最后一行之外,长度字符都应该是“M”这个ASCII字符(77=32+45),最后一行的长度字符为32+剩下的字节数目这个ASCII字符。
例如:
flag{this_is_a_flag}
加密后:
49FQA9WMT:&ES7VES7V%?9FQA9WT`
`
解密:
在线解密:https://www.qqxiuzi.cn/bianma/uuencode.php
- XXencode密码
XXencode将输入文本以每三个字节为单位进行编码。如果最后剩下的资料少于三个字节,不够的部份用零补齐。这三个字节共有24个Bit,以6bit为单位分为4个组,每个组以十进制来表示所出现的数值只会落在0到63之间。以所对应值的位置字符代替。它所选择的可打印字符是:+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,一共64个字符。跟base64打印字符相比,就是uuencode多一个“-” 字符,少一个”/” 字符。 但是,它里面字符顺序与Base64完全不一样。与UUencode比较,这里面所选择字符,都是常见字符,没有特殊字符。
每60个编码输出(相当于45个输入字节)将输出为独立的一行,每行的开头会加上长度字符,除了最后一行之外,长度字符都应该是“h”这个字符(45,刚好是64字符中,第45位’h’字符),最后一行的长度字符为剩下的字节数目 在64字符中位置所代表字符。
例如:
flag{this_is_a_flag}
加密后:
INalVNrhoO4ZnLqZnLq3TNalVNro+
解密:
在线解密:http://web.chacuo.net/charsetxxencode
散列/哈希算法
Hash,音译“哈希”,一般翻译做“散列”,把任意长度的数据作为输入,然后通过Hash散列算法得到一个固定长度的输出值,该输出值就是散列值,它是一种数据压缩映射关系。 简单来说就是将做任意长度的消息压缩到某一固定长度的消息摘要的函数。
常见的算法有SHA1、SHA224、SHA256、SHA384、SHA512和MD5等。
而HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512、HmacMD5是需要密码的,PBKDF2需要提供key长度、盐值和迭代次数。解题时可根据已知条件选择合适的算法。
例如:
flag{this_is_a_flag}
MD5加密后:
b0f8f148cb330680b30f8d1df37d12d4
解密:
在线解密:https://tool.oschina.net/encrypt?type=2
RSA加密
RSA算法,它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。
RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥 。
在线解密:http://tools.jb51.net/password/rsa_encode/
对文件批量RSA加密的例题:https://mrcx-personal.gitee.io/2021/01/30/adworld-wp-Mysterious-GIF/
非正常(?)编码
这种密码方式比较特殊,加密之后的结果有时候连它是密码都看不出来。
- brainfuck:
由+-<>[]组成的一串字符。
例题:https://mrcx-personal.gitee.io/2020/12/02/adworld-wp-can_has_stdio/
在线解密:http://ctf.ssleye.com/brain.html
- jsfuck:
由6个字符!+ 来编写的JavaScript程序
在线解密:https://www.sojson.com/jsjiemi.html
当然也可以直接复制到浏览器的控制台上跑一遍,它就会自己执行了。
- rockstar
读起来像是一首诗(?)
例题:https://adworld.xctf.org.cn/task/answer?type=misc&number=1&grade=1&id=5498
该语言的GitHub页面:https://github.com/RockstarLang/rockstar
GitHub上面有相关的文档和python脚本,可供使用。
其他
比如Unicode、URL、进制转换等等:
在线解密:站长之家:http://tool.chinaz.com/tools/unicode.aspx
bugku工具箱:https://ctf.bugku.com/tools
CTF学习笔记-crypto的一些总结(未完待续)
install_url
to use ShareThis. Please set it in _config.yml
.