CTF-Crypto

目录

Quoted-printable

Rabbit

栅栏加密

RSA

凯撒加密

猪圈密码

uuencode

Morse(莫尔斯电码)

异或

MD5爆破

 RSA


近期又开始接触到了CTF中的Crypto方向,然后整理一下自己遇到的各种的加密的方式。

Quoted-printable

quoted-printable编码方法适合所传输数据中只有少量的非ASCII编码,用一个等号=后面加两个数字字符来表示一个非ASCII码字符

例如:=E9=82=A3=E4=BD=A0=E4=B9=9F=E5=BE=88=E6=A3=92=E5=93=A6

在线工具:

Quoted-printable编码|Quoted-printable解码|Quoted-printable编码原理介绍--查错网

Rabbit

Rabbit 是一种高速流密码, 使用一个 128 位密钥和一个 64 位初始化向量。 该加密算法的核心组件是一个位流生成器,该流生成器每次迭代都会加密 128 个消息位。

它的主要的组成部分为:

  •         26个大小写的英文字母、=、+、/;

        以U2FsdGVkX1开头;

        结尾可能存在=号,也可能不存在。

在线工具:

Rabbit加密-Rabbit解密-在线Rabbit加密解密工具

栅栏加密

        栅栏加密法是一种比较简单快捷的加密方法。栅栏加密法就是把要被加密的文件按照一上一下的写法写出来,再把第二行的文字排列到第一行的后面。相应的,破译方法就是把文字从中间分开,分成2行,然后插入。栅栏加密法一般配合其他方法进行加密。

比如有这样的一段明文:hello world

首先就是将其中的空格去掉,变成helloworld;然后数一下一共有多少个字符------10个,然后我们就可以将它们分成两行,每一行5个字符。变成:

hello

world

之后就是按照一上一下的写法写出来,变成hweolrllod。适当的加上点空格,建议一行有几个字就在第几个字处打空格;

栅栏加密在线工具:

栅栏密码转换器_栅栏密码解密加密_栅栏密码在线翻译

RSA

RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK 。

      RSA算法的具体描述如下:

(1)任意选取两个不同的大素数p和q计算乘积\psi (n)=(p-1)*(q-1);n=p*q;

(2)任意选取一个大整数e,满足gcd(e,\psi (n))=1,也就是说,e和\psi (n)的最大公约数为1,

 ,整数e用做加密钥(注意:e的选取是很容易的,例如,所有大于p和q的素数都可用) [5]  ;

(3)确定的解密钥d,满足(de)mod\psi (n)=1,即de=k\psi (n)+1,k>=1是一个任意的整数,所以,若知道e和\psi (n)很容易计算出d。

(4)公开整数n和e,秘密保存d;

(5)将明文m(m<n是一个整数)加密成密文c,加密算法为c=E(m)=m^{^{e}}modn 

(6)将密文c解密为明文m,解密算法为 m=D(c)=c^{^{d}}modn

然而只根据n和e(注意:不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密。

可以使用工具

这个工具在使用的时候,应该注意的地方就是Public Exponent(E)他要求我们输入的值时十六进制,所以如果公钥e=17的话,那么对应的十六进制为11。还有就是Number base设置为10进制。

凯撒加密

凯撒加密法,或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。凯撒加密法的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时的密钥就是3):

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ

密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC

例如:BUUCTF-大帝的秘密武器1

拿到题目提示我们是一个zip的文件,ok,改后缀名,解压得到:

使用在线的凯撒解密工具发现偏移密钥为13的时候,解密出的字符串为SECURITY(安全),然后使用偏移密钥13,对comechina进行加密,得到的就是flag。

中文电码

中文电码表采用了四位阿拉伯数字作代号,从0001到9999按四位数顺序排列,用四位数字表示最多一万个汉字、字母和符号。

例题BUUCTF-信息化的时代 1

初步判断为中文电码,使用在线中文电码转换工具。

中文电码转换 - 在线工具栏

​得到flag就是计算机要从娃娃抓起。

猪圈密码

猪圈密码是一种以格子为基础的简单替换密码。早在1700年代,共济会常常使用这种密码保护一些私密纪录或者用来通讯,也称作共济会密码。

BUUCTF-萌萌哒的八戒

传统的猪圈密码对照表如下:

 拿题目所给的图片进行对照即可得出密码。

uuencode

UUENCODE是将二进制文件转换为文本文件的过程,转换后的文件可以通过纯文本e-mail进行传输,在接收方对该文件进行uudecode,即将其转换为初始的二进制文件。

在线工具:CTF在线工具-在线UUencode编码|UU编码|UUencode解码|UUencode编码原理|UUencode编码算法

例题:BUUCTF-unencode

 直接就可以得到flag。

Morse(莫尔斯电码)

电报最早是由美国的摩尔斯在1844年发明的,故也被叫做摩尔斯电码。由两种基本信号和不同的间隔时间组成:短促的点信号" .";保持一定时间的长信号"—"。

例题:BUUCTF-Morse

题目已经提示我们Morse,所以就是用摩斯电码解密,这里的/代表着空格的意思,直接脚本replace就可以了。

解密的结果为61666374667b317327745f73305f333435797d。

应该是十六进制,转为字符串就好了,便得到了密码。 

异或

以BUUCTF-异性相吸为例题

 拿到题目看到key.txt和密文.txt,放到010editor里面。

 选中将其二进制文本复制出来,进行异或运算。(选中->编辑->复制为->复制为二进制文本)

mw='0110000101110011011000010110010001110011011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011100010111011101100101011100110111000101100110'
key='0000011100011111000000000000001100001000000001000001001001010101000000110001000001010100010110000100101101011100010110000100101001010110010100110100010001010010000000110100010000000010010110000100011000000110010101000100011100000101010101100100011101010111010001000001001001011101010010100001010000011011'


result=""

for i in range(len(key)):
    if mw[i]==key[i]:
        result+='0'
    else:
        result+='1'
print(result)

将运行结果再导入010editor中,新建->新建十六进制文本->编辑->粘贴自->粘贴自二进制文本。

 便可以得到flag 

MD5爆破

以BUUCTF-还原大师 1为例:

 这个题说的很明显,就是问号的部分替换为大写字母,然后使用md5加密,加密的结果在转换为大写。

上脚本,由于自己是小白,自己写的不如大佬们写的好,轻点喷。

#MD5加密
import hashlib

str1='TASC?O3RJMV?WDJKX?ZM'
for i in range(65,91):
    temp1=str1.replace('?',chr(i),1)    #第三个参数的意思是替换的次数不超过1次。
    for j in range(65,91):
        temp2=temp1.replace('?',chr(j),1)
        for k in range(65,91):
            temp3=temp2.replace('?',chr(k),1)
            hl=hashlib.md5()
            hl.update(temp3.encode(encoding='utf8'))
            md5=hl.hexdigest().upper()  #转换为大写字母
            if md5[:4]=='E903': #如果开头的四个字母是E903 在进行输出
                print("加密结果:"+str(md5))

 RSA

关于RSA的部分,之后再整理吧,做到了很多RSA的题。

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Y4y17

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值