CTF之crypto
百度解释:
维基解释:
MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16个字符(BYTES))的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 中被加以规范。
MD5的特点
MD5算法原理的讲解:https://blog.csdn.net/hla199106/article/details/45129963
1、压缩性:无论数据长度是多少,计算出来的MD5值长度相同(32位)
2、容易计算性:由原数据容易计算出MD5值
3、抗修改性:即便修改一个字节,计算出来的MD5值也会巨大差异
4、抗碰撞性:知道数据和MD5值,很小概率找到相同MD5值相同的原数据
加密/解密
离线工具(较慢):
MD5Crack 官网:http://md5crack.adintr.com/
在线查询(快):
base64编码
维基解释
Base64(基底64)是一种基于64个可打印字符来表示二进制数据的表示方法。由于64=2^6,所以每6个比特为一个单元,对应某个可打印字符。3个字节相当于24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。在Base64中的可打印字符包括字母A-Z
、a-z
、数字0-9
,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。一些如uuencode的其他编码方法,和之后BinHex的版本使用不同的64字符集来代表6个二进制数字,但是不被称为Base64。
Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。
举个例子
编码“Man”的结果为TWFu ,详细原理如下:
在此例中,Base64算法将3个字节编码为4个字符。
Base64索引表
如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。在编码后的Base64文本后加上一个或两个=
号,代表补足的字节数。也就是说,当最后剩余两个八位(待补足)字节(2个byte)时,最后一个6位的Base64字节块有四位是0值,最后附加上两个等号;如果最后剩余一个八位(待补足)字节(1个byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号。 参考下表:
编码/解码
离线工具
CTFcrackTools GitHub项目地址:https://github.com/0Chencc/CTFCrackTools
在线工具
URL编码
统一资源定位符的编码机制
维基解释:
百分号编码(英语:Percent-encoding),又称:URL编码(URL encoding)是特定上下文的统一资源定位符 (URL)的编码机制,实际上也适用于统一资源标志符(URI)的编码。也用于为 application/x-www-form-urlencoded MIME准备数据,因为它用于通过HTTP的请求操作(request)提交HTML表单数据。
编码/解码
离线工具
CTFcrackTools GitHub项目地址:https://github.com/0Chencc/CTFCrackTools
凯撒密码
维基解释
凯撒密码(英语:Caesar cipher),或称凯撒加密、凯撒变换、变换加密,是一种最简单且最广为人知的加密技术。凯撒密码是一种替换加密技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期凯撒的名字命名的,据称当年凯撒曾用此方法与其将军们进行联系。
原理
凯撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码。凯撒密码还在现代的ROT13系统中被应用。但是和所有的利用字母表进行替换的加密技术一样,凯撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。
凯撒密码的加密、解密方法还能够通过同余的数学方法进行计算。首先将字母用数字代替,A=0,B=1,...,Z=25。此时偏移量为n的加密方法即为:
解密就是:
加密/解密
离线工具
CTFcrackTools GitHub项目地址:https://github.com/0Chencc/CTFCrackTools
在线工具
https://www.qqxiuzi.cn/bianma/kaisamima.php
ROT13
维基解释
ROT13
(回转13位,英语:rotate by 13 places,有时也记为ROT-13
)是一种简易的替换式密码
。ROT13
是一种在英文网络论坛用作隐藏八卦(spoiler)、妙句、谜题解答以及某些脏话的工具,目的是逃过版主或管理员的匆匆一瞥。ROT13
被描述成“杂志字谜上下颠倒解答的Usenet点对点体”。(Usenet equivalent of a magazine printing the answer to a quiz upsidedown.) ROT13
也是过去在古罗马开发的凯撒加密的一种变体。
ROT13透过与其成对的13个字母一对一置换,如HELLO变成URYYB(或者将之解码,URYYB再度变回HELLO)。
ROT13是它自己本身的逆反;也就是说,要还原ROT13,套用加密同样的算法即可得,故同样的操作可用再加密与解密。该算法并没有提供真正的密码学上的保全,故它不应该被套用在需要保全的用途上。它常常被当作弱加密示例的典型。ROT13激励了广泛的在线书信撰写与字母游戏,且它常于新闻组对话中被提及。
原理
套用ROT13到一段文字上仅仅只需要检查字符字母顺序并取代它在13位之后的对应字母,有需要超过时则重新绕回26英文字母开头即可[2]。 A换成N、B换成O、依此类推到M换成Z,然后序列反转:N换成A、O换成B、最后Z换成M。只有这些出现在英文字母里头的字符受影响;数字、符号、空白字符以及所有其他字符都不变。因为只有在英文字母表里头只有26个,并且26= 2 × 13,ROT13函数是它自己的逆反,对任何字符 x:
换句话说,两个连续的ROT13应用函数会回复原始文字(在数学上,这有时称之为对合(involution);在密码学上,这叫做点对点加密(reciprocal cipher))。
转换可以利用查找表完成,如下例所示:
加密/解密
离线工具
CTFcrackTools GitHub项目地址:https://github.com/0Chencc/CTFCrackTools
在线工具
摩尔斯电码
维基解释
摩尔斯电码(英语:Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。是由美国发明家萨缪尔·摩尔斯及其助手艾尔菲德·维尔在1836年发明。
原理
摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用0和1两种状态的二进制代码,它的代码包括五种:
-
点( · ):1
-
划( - ):111
-
字符内部的停顿(在点和划之间):0
-
字符之间的停顿:000
-
单词之间的停顿:0000000
加密/解密
离线工具
CTFcrackTools GitHub项目地址:https://github.com/0Chencc/CTFCrackTools
在线工具
众果搜中的摩斯密码
https://www.bejson.com/enc/morse/
Quoted-printable
维基解释
Quoted-printable或QP encoding,没有规范的中文译名,可译为可打印字符引用编码或使用可打印字符的编码。Quoted-printable是使用可打印的ASCII字符(如字母、数字与“=”)表示各种编码格式下的字符,以便能在7-bit数据通路上传输8-bit数据, 或者更一般地说在非8-bit clean媒体上正确处理数据。这被定义为MIME content transfer encoding,用于email。QP使用“=”开头的转义字符. 一般限制行宽为76,因为有些软件限制了行宽.
Quoted-printable编码
任何8-bit字节值可编码为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)。即在每行末尾加上一个“=”,但并不会出现在解码得到的文本中。这种软换行也适用于文本的行非常长,超过了软件限制(例如,某些SMTP软件要求最大行长为1000个字符),这也是RFC 2821允许的。
编码/解码
在线
http://www.hiencode.com/quoted.html
Rabbit
个人做题经验
目前没有找到官方的解释。。。
看过一些题目的WP,又博主说rabbit的形式和base64差不多,当base64走不下去的时候可以尝试尝试rabbit
加密/解密
在线
http://www.jsons.cn/rabbitencrypt/
栅栏密码
百度百科
所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)
原理
①把将要传递的信息中的字母交替排成上下两行。
②再将下面一行字母排在上面一行的后边,从而形成一段密码。
③例如:
明文:THE LONGEST DAY MUST HAVE AN END
加密:
1、把将要传递的信息中的字母交替排成上下两行。
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
2、 密文:
将下面一行字母排在上面一行的后边。
TEOGSDYUTAENN HLNETAMSHVAED
解密:
先将密文分为两行
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
再按上下上下的顺序组合成一句话
明文:THE LONGEST DAY MUST HAVE AN END
加密/解密
在线
https://www.qqxiuzi.cn/bianma/zhalanmima.php
离线
CaptfEncoder-win-x64-2.0.1 项目网站:https://github.com/guyoung/CaptfEncoder/releases
RSA
维基解释
RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(LeonardAdleman)在1977年一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人 姓氏开头字母拼在一起组成的。
原理
公钥、私钥的产生
加密消息
解密消息
签名消息
RSA也可以用来为一个消息署名。假如爱丽丝想给鲍伯传递一个署名的消息的话,那么她可以为她的消息计算一个散列值(Message digest),然后用她的私钥“加密”(如同前面“加密消息”的步骤)这个散列值并将这个“署名”加在消息的后面。这个消息只有用她的公钥才能被解密。鲍伯获得这个消息后可以用爱丽丝的公钥“解密”(如同前面“解密消息”的步骤)这个散列值,然后将这个数据与他自己为这个消息计算的散列值相比较。假如两者相符的话,那么鲍伯就可以知道发信人持有爱丽丝的私钥,以及这个消息在传播路径上没有被篡改过。
解密
离线工具