刷题记录crypto2
BUUCTF crypto
这篇里面的密码学都是非常非常简单的,基本上一步解密就能得到,目的是能够多的了解到密码加密方式,这样之后见到密码题能有一定的思路
MD5
下载附件,打开后用MD5解密网站直接进行解密,得到flag
一眼就解密
见过几次应该一眼就能看出来题干中用的是base64加密方式进行的加密结果,故用base64解密网站进行解密即可得到flag
Url编码
看题目名称就可以知道这道题要用url解密,因此得到flag
看我回旋踢
首先打开确实没想到是什么加密,但看密文很明确就是flag的字样,synt{5pq1004q-86n5-46q8-o720-oro5on0417r1},发现s和f相差13,y和l也相差13,后两位也是相差13,知道是凯撒密码,偏移量为13,解密得到flag
摩斯
在线摩斯密码解密得到flag
password
这道题确实靠猜的,数了数key格式的位数恰好等于姓名加生日,因此猜测密码为zs19900315,最后包上flag即可
变异凯撒
刚看到这道题的时候没有什么思路,看了提示知道是将ASCII码和凯撒密码结合起来了
根据ASCII码对应来看,已知flag对应afZ_
f–102,a–97 两者相差5
l–108,f–102 两者相差6
a–97,Z–90 两者相差7
g–103,_–95 两者相差8
可以推得偏移量依次加一,由此可以得到flag
Quoted-printable
首先题目名称意思是可引用-可打印的,它是多用途互联网邮件扩展(MIME) 一种实现方式
解密网站:http://www.metools.info/code/quotedprintable231.html
Quoted-Printable编码方法
任何一个8位的字节值可编码为3个字符:一个等号”=”后跟随两个十六进制数字(0–9或A–F)表示该字节的数值.例如,ASCII码换页符(十进制值为12)可以表示为”=0C”, 等号”=”(十进制值为61)必须表示为”=3D”. 除了可打印ASCII字符与换行符以外,所有字符必须表示为这种格式.
所有可打印ASCII字符(十进制值的范围为33到126)可用ASCII字符编码来直接表示, 但是等号”=”(十进制值为61)不可以这样直接表示.ASCII的水平制表符(tab)与空格符, 十进制为9和32, 如果不出现在行尾则可以用其ASCII字符编码直接表示。如果这两个字符出现在行尾,必须QP编码表示为”=09″ (tab)或”=20″ (space).
如果数据中包含有意义的行结束标志,必须转换为ASCII回车(CR)换行(LF)序列,既不能用原来的ASCII字符也不能用QP编码的”=”转义字符序列。 相反,如果字节值13与10有其它的不是行结束的含义,它们必须QP编码为=0D与=0A.
quoted-printable编码的数据的每行长度不能超过76个字符. 为满足此要求又不改变被编码文本,在QP编码结果的每行末尾加上软换行(soft line break). 即在每行末尾加上一个”=”, 但并不会出现在解码得到的文本中.
function quoted_printable_encode($string) {
return preg_replace('/[^\r\n]{73}[^=\r\n]{2}/', "$0=\r\n", str_replace("%","=",
rawurlencode($string)));
}
一个函数就可以,将所有字符串urlencode转换后,%号替换为”=”号,然后对非\r\n超过73连续字符,后面加一个=\r\n。这个是简单实现方法! 按照该编码详细说明里面,有些空格、换行,还有一些特殊字符可以不用转换。不过一起转换了,也不会有影响!
PHP中可以使用下面1对函数进行编码和解码:
quoted_printable_encode() 函数把 8 位字符串转换为 quoted-printable 字符串。
quoted_printable_decode() 对经过 quoted-printable 编码后的字符串进行解码,返回 8 位的 ASCII 字符串