CTF之crypto

MD5

百度解释:

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

维基解释:

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/

在线查询(快):

https://cmd5.com/

base64编码

维基解释

Base64(基底64)是一种基于64个可打印字符来表示二进制数据的表示方法。由于64=2^6,所以每6个比特为一个单元,对应某个可打印字符。3个字节相当于24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。在Base64中的可打印字符包括字母A-Za-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

在线工具

1、https://base64.supfree.net/

2、https://the-x.cn/base64

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

在线工具

http://www.rot13.de/index.php

摩尔斯电码

维基解释

摩尔斯电码(英语:Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。是由美国发明家萨缪尔·摩尔斯及其助手艾尔菲德·维尔在1836年发明。

原理

 

摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用0和1两种状态的二进制代码,它的代码包括五种:

  1. 点( · ):1

  2. 划( - ):111

  3. 字符内部的停顿(在点和划之间):0

  4. 字符之间的停顿:000

  5. 单词之间的停顿: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),然后用她的私钥“加密”(如同前面“加密消息”的步骤)这个散列值并将这个“署名”加在消息的后面。这个消息只有用她的公钥才能被解密。鲍伯获得这个消息后可以用爱丽丝的公钥“解密”(如同前面“解密消息”的步骤)这个散列值,然后将这个数据与他自己为这个消息计算的散列值相比较。假如两者相符的话,那么鲍伯就可以知道发信人持有爱丽丝的私钥,以及这个消息在传播路径上没有被篡改过。

解密

离线工具

RSA Tool 2 by tE!

posted @ 2022-03-07 22:12  vi0let  阅读(450)  评论(0编辑  收藏  举报