资讯详情

[buuctf] crypto全解——前84道(不建议直接抄flag)

buuctf crypto

  • 1.MD5
  • 2.Url编码
  • 3.一眼解密
  • 4.看着我回旋踢
  • 5.摩丝
  • 6.[BJDCTF 2nd]签到-y1ng
  • 7.password
  • 8.变异凯撒
  • 9.Quoted-printable
  • 10.Rabbit
  • 11.篱笆墙的影子
  • 12.RSA
  • 13.丢失的MD5
  • 14.[BJDCTF 2nd]老文盲了
  • 15.Alice与Bob
  • 16.rsarsa
  • 17.大帝的密码武器
  • 18.Windows系统密码
  • 19.[BJDCTF 2nd]cat_flag
  • 20.[BJDCTF 2nd]燕言燕语-y1ng
  • 21.传统知识 古典密码
  • 22.[GKCTF2020]小学生密码学
  • 23.信息时代的步伐
  • 24.RSA1
  • 25.凯撒?替换?
  • 26.old-fashion
  • 27.[BJDCTF 2nd]灵能精通-y1ng
  • 28.获得权限的第一步
  • 29.可爱的八戒
  • 30.RSA3
  • 31.RSA2
  • 32.[BJDCTF 2nd]Y1nglish-y1ng
  • 世上无难事
  • 34.异性相吸
  • 35.RSA
  • 36.还原大师
  • 37.[GKCTF2020]汉字的秘密
  • 38.robomunication
  • 39.RSAroll
  • 40.Unencode
  • 41.Dangerous RSA
  • 42.Cipher
  • 43.[AFCTF2018]Morse
  • 44.[HDCTF2019]basic rsa
  • 45.达芬奇密码
  • 46.ras2
  • 47.[BJDCTF 2nd]rsa0
  • 48.[GXYCTF2019]CheckIn
  • 49.RSA5
  • 50.传感器
  • 51.[GUET-CTF2019]BabyRSA
  • 52.密码学的心声
  • 53.rot
  • 54.这是什么
  • 55.[BJDCTF 2020]这是base??
  • 56.[NCTF2019]Keyboard
  • 57.[BJDCTF 2nd]rsa1
  • 58.[NCTF2019]childRSA
  • 59.[HDCTF2019]bbbbbbrsa
  • 60. [MRCTF2020]vigenere
  • 61.[BJDCTF2020]RSA
  • 62.一张谍报
  • 63.[MRCTF2020]古典密码知道多少
  • 64.[MRCTF2020]天干地支 甲子
  • 65.[MRCTF2020]keyboard
  • 66.[WUSTCTF佛说:只能四天
  • 67.[BJDCTF2020]rsa_output
  • 68.[ACTF新生赛2020]crypto-rsa0
  • 69.SameMod
  • 70.[BJDCTF2020]signin
  • 71.yxx
  • 72.[AFCTF2018]Vigenère
  • 73.[GWCTF 2019]BabyRSA
  • 74.浪里淘沙
  • 75.[WUSTCTF2020]babyrsa
  • 76.[NPUCTF什么是2020]?
  • 77.[GKCTF2020]babycrypto
  • 78.鸡藕椒盐味
  • 79.RSA4
  • 80.[NCTF2019]babyRSA
  • 81.[BJDCTF2020]easyrsa
  • 82.[AFCTF你能看到这是什么加密?
  • 83.[ACTF新生赛2020]crypto-classic0
  • 84.救世捷径

1.MD5

获得题目 在这里插入图片描述 题目名称叫MD5.然后我们直接复制这个md5在线解密即可获得flag

2.Url编码

获得题目 老规矩直接复制这类问题url解码里面解密即可得到flag

3.一眼解密

看到题目 题目后面有=就先猜一手base直接复制64编码base解码解密可获得64flag

4.看着我回旋踢

看题目,我觉得凯撒密码 直接复制到CTFcrackToolsv里面解密

5.摩丝

查看题目 在线解密摩斯密码 解密完用flag{}包裹iloveyou提交即可

6.[BJDCTF 2nd]签到-y1ng

查看题目 见到=先试试base64解密 注意:这里要按要求BJD换成flag,然后提交。

7.password

查看题目 说实话,这有点运气。 我数x有十个 然后就是zs 19900315 用flag提交包裹,嗯,然后就对了。

8.变异凯撒

查看题目 又因为明文flag对应afZ_,因此,寻找明文和密文的规律 f-102 a-97 相差5 l-108 f-102 相差6 a-97 Z-90 相差7 g-103 _-95 相差8 可以看出,每个字符的偏移量是n 4 因此,依次计算各密文字符对应的明文字符,明文为 flag{Caesar_variation}

9.Quoted-printable

查看题目 首先,这个话题是尝试加密编程 我们直接试一试Quoted-printable解密即可 把得到的 那你也很棒 用lag包裹即可

10.Rabbit

查看题目 题目叫Rabbit这是一个加密,我们直接Rabbit在线解密即可

11.篱笆墙的影子

查看题目 篱笆墙很明显联想到栅栏密码,用栅栏在线解密即可

12.RSA

查看题目 学习RSAtool2的使用:

1.Number Base 设置为十进制

2.注意:Public Exponent这里要使用16进制的数,如果公钥e=17的话,就应该填入十六进制的11

3.给出p,q,e的话直接填入,再点击Calc.D,获得d

4.给出的是n和e的话,输入n和e,点击Factor N(分解),得到p,q,再重复第3步就能得到d了

注意e填进去是16进制,需要将17转hex得到11再填进去 用RSA-Tool 2 by 1E!即可 RSA-Tool下载链接

13.丢失的MD5

查看题目 看代码用python2.x的版本运行即可获得flag 运行结果即是flag

14.[BJDCTF 2nd]老文盲了

查看题目 题目名字文盲,而且这txt里面的文字基本都不认识,那就用拼音解密去把拼音翻译出来 flag: BJD{淛匶襫黼瀬鎶軄鶛驕鳓哵}

15.Alice与Bob

查看题目 题目都说了分解素数,小前大后 素数分解 直接可以看出flag{101999966233}

16.rsarsa

查看题目 类型:n+e+c+p+q= m

e = 65537
p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 
11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
n = p*q
#密文
C = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034

d = 56632047571190660567520341028861194862411428416862507034762587229995138605649836960220619903456392752115943299335385163216233744624623848874235303309636393446736347238627793022725260986466957974753004129210680401432377444984195145009801967391196615524488853620232925992387563270746297909112117451398527453977

#求明文
M = pow(C,d,n)    #快速求幂取模运算
print(M)
解出flag{ 
        5577446633554466577768879988}

17.大帝的密码武器

下载的zip没有后缀,那就加一个zip为后缀 然后即可查看题目

大帝的武器,基本可以猜是凯撒密码

str1 = 'FRPHEVGL'
str2 = str1.lower()                                 #转换为小写方便识别
num = 1                                             #偏移量
for i in range(26):
    print("{:<2d}".format(num),end = ' ')
    for temp in str2:
        if(ord(temp)+num > ord('z')):               #如果超出'z',需要重新映射会a~z这26个字母上
            print(chr(ord(temp)+num-26),end = '')
        else:
            print(chr(ord(temp)+num),end = '')
    num += 1
    print('')
    str = 'ComeChina'
    for temp in str:
        if (ord(temp) + 13 > ord('z')):
            print(chr(ord(temp) + 13 - 26), end='')
        else:
            print(chr(ord(temp) + 13), end='')
    print('')

可以看到偏移量是13的时候,好像是我们想要的东西,然后将密文里面的ComeChina做偏移量为13的偏移:然后如果超出z,减26使其回到A-z范围内(别问我为什么,因为不减的结果P|zrPuv{n经过我的验证是不对的),最终得到PbzrPuvan,用花括号包起来就可以提交了flag{PbzrPuvan}

18.Windows系统密码

查看题目 用md5解密来解一下ctf 第二段解出flag

19.[BJDCTF 2nd]cat_flag

查看题目 一只有鸡腿,一只没有鸡腿。很容易想到二进制数0,1。 将图片用二进制表示为: 01000010 01001010 01000100 01111011 01001101 00100001 01100001 00110000 01111110 01111101 将二进制数转为16进制进制转换,再16进制转文本16转文。 得到flag为: BJD{M!a0~}

20.[BJDCTF 2nd]燕言燕语-y1ng

查看题目 燕子说79616E7A69205A4A517B78696C7A765F6971737375686F635F73757A6A677D20 明显是16进制,16转文,转换一下。 明显是维吉尼亚密码加密,维吉尼亚密码在线解密

21.传统知识+古典密码

查看题目 加密方法: ①置换密码(又称易位密码):明文的字母保持相同,但顺序被打乱了。 代表:栅栏加密

②代替密码:就是将明文的字符替换为密文中的另一种的字符,接收者只要对密文做反向替换就可以恢复出明文。 代表:恺撒加密 六十年甲子表 1.由这张表就能知道,辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳。代表的数值了。 2.信的背面还写有“+甲子”,一甲子是60年,‘+甲子’ == ‘+60’ 3.所以,辛卯,癸巳,丙戌,辛未,庚辰,癸酉,己卯,癸巳,再加上60,利用ASCLL码,就能得到对应的ACSLL字符了 :XZSDMFLZ 4.把这个用栅栏解密 把这两个结果用凯撒解密 这个比较通顺,即是flag

22.[GKCTF2020]小学生的密码学

查看题目 仿射密码的代码实现 破解代码

#include <iostream>
#include<math.h>
#include<string.h>
using namespace std;

//模的取逆
int dx, y, q;
void extend_Eulid(int aa, int bb)
{ 
        
	if (bb == 0) { 
        
		dx = 1; y = 0; q = aa;
	}
	else { 
        
		extend_Eulid(bb, aa % bb);
		int temp = dx;
		dx = y;
		y = temp - aa / bb * y;
	}
}
//

int main()
{ 
        
	int a, b, YN, i, l;
	char c[100];
	int x[100];
	char ex[100], y[100];

	cout << "请依次输入k =( a, b )的a, b值,其中 a,b ∈ Z/(26),gcd( a,26) = 1 :" << endl;
	cin >> a >> b;
	cout << "那么你的加密函数就是 ex = " << a << "*x + " << b << endl;
	cout << endl << "接下来输入你要加密的明文(小写字母):" << endl;
	cin >> c;//明文
	l = strlen(c);

	for (i = 0; i < l; i++)
	{ 
        
		x[i] = c[i] - 'a';
		ex[i] = (a * x[i] + b) % 26;//数字
	}
	cout << "加密后的字母为:";

	for (i = 0; i < l; i++)
	{ 
        
		cout << char(ex[i] + 'a');//转字符
	}
	cout << endl << endl;
	cout << "是否要解密原文(输入1则确定,输入其他则取消):";
	cin >> YN;

	while (YN == 1)
	{ 
        
		extend_Eulid(a, 26);//取逆
		dx = (dx + 26) % 26;
		cout << dx<<endl;
		for (i = 0; i < l; i++)
		{ 
        
			y[i] = (dx * int(x[i]) - dx * b) % 26;
			y[i] = (y[i] + 26) % 26;//+26取正
			cout << char(y[i]+ 'a' );
		}
		break;
	}
	}

23.信息化时代的步伐

查看题目 中文电码在线查询 很明显了flag就是 计算机要从娃娃抓起

24.RSA1

查看题目 类型:dp+dq+p+q+c = m 已知dp dq泄露 使用脚本dp+dq+p+q+c = m 这个就用python来写即可

p = 8637633767257008567099653486541091171320491509433615447539162437911244175885667806398411790524083553445158113502227745206205327690939504032994699902053229
q = 12640674973996472769176047937170883420927050821480010581593137135372473880595613737337630629752577346147039284030082593490776630572584959954205336880228469
dp = 6500795702216834621109042351193261530650043841056252930930949663358625016881832840728066026150264693076109354874099841380454881716097778307268116910582929
dq = 783472263673553449019532580386470672380574033551303889137911760438881683674556098098256795673512201963002175438762767516968043599582527539160811120550041
c = 24722305403887382073567316467649080662631552905960229399079107995602154418176056335800638887527614164073530437657085079676157350205351945222989351316076486573599576041978339872265925062764318536089007310270278526159678937431903862892400747915525118983959970607934142974736675784325993445942031372107342103852

import gmpy2
I = gmpy2.invert(q,p)
mp = pow(c,dp,p)
mq = pow(c,dq,q)               #求幂取模运算

m = (((mp-mq)*I)%p)*q+mq       #求明文公式

print(hex(m))          #转为十六进制

运行的出0x6e6f784354467b57333163306d335f37305f4368316e343730776e7d 很明显是十六进制,我们直接十六转文 即可得到flag

25.凯撒?替换?呵呵!

MTHJ{CUBCGXGUGXWREXIPOYAOEYFIGXWRXCHTKHFCOHCFDUCGTXZOHIXOEOWMEHZO} 强行爆破 FLAG{ SUBSTITUTION CIPHER DECRYPTION IS ALWAYS EASY JUST LIKE A PIECE OF CAKE}得到结果即为flag,大写还是小写忘了,这是大小写转换的在线网页

26.old-fashion

查看题目 跟上一道题一样直接强行爆破

27.[BJDCTF 2nd]灵能精通-y1ng

老规矩,没后缀跟着前面加就是 得到一张图片 看着像是猪圈,就在网上找了找。 这是猪圈加密的变形圣堂武士密码 翻译即可得到flag

28.权限获得第一步

查看题目 直接md5在线解密 即可得到flag

29.萌萌哒的八戒

查看题目 猪圈密码 对着解密即可

30.RSA3

查看题目 类型:共模n攻击

from gmpy2 import invert
# 欧几里得算法
def egcd(a, b):
  if a == 0:
    return (b, 0, 1)
  else:
    g, y, x = egcd(b % a, a)
    return (g, x - (b // a) * y, y)

def main():
  n = 22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
  c1 = 22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
  c2 = 18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
  e1 = 11187289
  e2 = 9647291
  s = egcd(e1, e2)
  s1 = s[1]
  s2 = s[2]
  # 求模反元素
  if s1<0:
    s1 = - s1
    c1 = invert(c1, n)
  elif s2<0:
    s2 = - s2
    c2 = invert(c2, n)

  m = pow(c1,s1,n)*pow(c2,s2,n) % n
  print(m)

if __name__ == '__main__':
  main()

运行得到 十进制转十六进制 十六进制转文本即可得到flag链接前面有

31.RSA2

查看题目 类型:dp+n+e+c = m dp泄露 RSA各题型脚本\dp+n+e+c = m

import gmpy2 as gp

e = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657

c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751

for i in range(1, e):  # 在范围(1,e)之间进行遍历
    if (dp * e - 1) % i == 0:
        if n % (((dp * e - 1) // i) + 1) == 0:  # 存在p,使得n能被p整除
            p = ((dp * e - 1) // i) + 1
            q = n // (((dp * e - 1) // i) + 1)
            phi = (q - 1) * (p - 1)  # 欧拉定理
            d = gp.invert(e, phi)  # 求模逆
            m = pow(c, d, n)  # 快速求幂取模运算

print(m)  # 10进制明文
print('------------')
print(hex(m)[2:])  # 16进制明文
print('------------')
print(bytes.fromhex(hex(m)[2:]))  # 16进制转文本

运行得到flag

32.[BJDCTF 2nd]Y1nglish-y1ng

查看题目 老规矩直接爆破 BJD{pyth0n_Brut3_f0rc3_oR_quipquip_AI_Cr4cy} 把最后一个字母改成k BJD{pyth0n_Brut3_f0rc3_oR_quipquip_AI_Cr4ck}

33.世上无难事

查看题目

老规矩直接爆破 KEY IS 640E11012805F211B0AB24FF02A1ED09 flag{640E11012805F211B0AB24FF02A1ED09}

34.异性相吸

查看题目 把这两个用010打开

a = '0110000101110011011000010110010001110011011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011100010111011101100101011100110111000101100110'
b = '0000011100011111000000000000001100001000000001000001001001010101000000110001000001010100010110000100101101011100010110000100101001010110010100110100010001010010000000110100010000000010010110000100011000000110010101000100011100000101010101100100011101010111010001000001001001011101010010100001010000011011'
c = ''

for i in range(len(a)):
    if(a[i] == b[i]):
        c+='0'
    else:
        c+='1'
print(c)

运行得到0110011001101100011000010110011101111011011001010110000100110001011000100110001100110000001110010011100000111000001110010011100100110010001100100011011100110110011000100011011101100110001110010011010101100010001101010011010001100001001101110011010000110011001101010110010100111000001110010110010101111101 二转十六 十六转文

35.RSA

查看题目 类型:n+e+c+p+q= m + 公钥提取 把两个文件后缀都改成txt(我是把第一个文件改成了flagenc.txt) 明显pub.txt是一个公钥解析 再用分解N 得到q,p 明显q,p是十进制的得到D 写脚本

import rsa

e= 65537
n= 86934482296048119190666062003494800588905656017203025617216654058378322103517
p= 285960468890451637935629440372639283459
q= 304008741604601924494328155975272418463
d= 81176168860169991027846870170527607562179635470395365333547868786951080991441

key = rsa.PrivateKey(n,e,d,q,p)         #在pkcs标准中,pkcs#1规定,私钥包含(n,e,d,p,q)

with open("D:\\ctfbisai\\buumima\\0eaf8d6c-3fe5-4549-9e81-94ac42535e7b\\flagenc.txt","rb") as f:  #以二进制读模式,读取密文
    f = f.read()
    print(rsa.decrypt(f,key))           # f:公钥加密结果 key:私钥

运行就可以得到flag

36.还原大师

查看题目 这个就是md5爆破 python爆破脚本:

# -*- coding: utf-8 -*-
#!/usr/bin/env python
import hashlib

#print hashlib.md5(s).hexdigest().upper()
k = 'TASC?O3RJMV?WDJKX?ZM'                    #要还原的明文
for i in range(26):
	temp1 = k.replace('?',str(chr(65+i)),1)
	for j in range(26):
		temp2 = temp1.replace('?',chr(65+j),1)
		for n in range(26):
			temp3 = temp2.replace('?',chr(65+n),1)
			s = hashlib.md5(temp3.encode('utf8')).hexdigest().upper()#注意大小写
			if s[:4] == 'E903':    #检查元素
				print (s)       #输出密文

运行得到flag{E9032994DABAC08080091151380478A2}

37.[GKCTF2020]汉字的秘密

下载后得到word,查看得到这些字符 王壮 夫工 王中 王夫 由由井 井人 夫中 夫夫 井王 土土 夫由 土夫 井中 士夫 王工 王人 土由 由口夫

很明显是当铺密码 上脚本

dh = '田口由中人工大土士王夫井羊壮'
ds = '00123455567899'

cip = '王壮 夫工 王中 王夫 由由井 井人 夫中 夫夫 井王 土土 夫由 土夫 井中 士夫 王工 王人 土由 由口夫'
s = ''
for i in cip:
	if i in dh:
		s += ds[dh.index(i)]
	else:
		s += ' '
#print(s)

ll = s.split(" ")
t = ''
for i in range(0,len(ll)):
	t += chr(int(ll[i])+i+1)
print('t=', t, '\t\tt.lower()=', t.lower())

运行得到flag

38.robomunication

查看题目一个音频文件,直接就是用Audacity听 发现是摩斯密码, 听完整理一下就是… . .-… .-… — .-- … .- - … … - … . -.- . -.-- … - … … -… — --- .–. -… . . .–. 摩斯密码解密即可得到 本明显了boopbeep是flag 小写提交不行,转换大写提交。

39.RSAroll

查看题目 类型:n+e+c+p+q= m + n分解 在线分解质因数分解920139713 然后直接上代码

import gmpy2
N,p,q,e=920139713,18443,49891,19
d=gmpy2.invert(e,(p-1)*(q-1))
result=[]

with open("D:\\pycharm\\venv\\mima\\RSAroll.txt","r") as f:
    for line in f.readlines():
        line=line.strip('\n')#去掉列表中每一个元素的换行符
        result.append(chr(pow(int(line),d,N)))

for i in result:
    print(i,end='')

标签: n12f接近传感器c10cf传感器3c12p01770位移传感器2485n8ac接近传感器x15my1接近传感器3550n8nc接近传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台