BUUCTF-Crypto 刷题记录

主要使用的在线解密工具:CTF在线工具http://www.hiencode.com/

一眼就解密

题目:

下面的字符串解密后便能获得flag:ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30= 注意:得到的 flag 请包上 flag{} 提交

解题思路:
base64解密,CTF在线工具
得到flag{THE_FLAG_OF_THIS_STRING}

MD5

题目附件内容:

e00cf25ad42683b3df678c61f42c6bda

解题思路:
使用MD5解密工具尝试爆破,在线工具https://www.somd5.com/
在这里插入图片描述

Url编码

题目附件内容:

%66%6c%61%67%7b%61%6e%64%20%31%3d%31%7d

解题思路:
URL解码,CTF在线工具
得到flag{and 1=1}

看我回旋踢

题目附件内容:

synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}

解题思路:
凯撒密码解密,偏移量为 ord(‘s’)-ord(‘f’)=13
得到:flag{5cd1004d-86a5-46d8-b720-beb5ba0417e1}

摩丝

题目附件内容:

… .-… — …- . -.-- — …-

解题思路:
莫斯电码解密,在线工具http://mmoersima.00cha.net/
得到:iloveyou,转换为大写提交

password

题目附件内容:

姓名:张三
生日:19900315
key格式为key{xxxxxxxxxx}

解题思路:
考察弱密码,常见有名字+生日,进行猜测。密码为zs19900315

变异凯撒

题目附件内容:

加密密文:afZ_r9VYfScOeO_UL^RWUc
格式:flag{ }

解题思路:
主要是找到afZ_如何偏移为flag:
afZ_对应的ASCII码分别为:97、102、90、95,flag对应的ASCII码分别为102、108、97、103
从第一个字母开始,每对一位字母进行加密,偏移量依次增加1(偏移量从5开始)

'''
a=97	+5=102=f
f=102	+6=108=l
Z=90	+7=97=a
_=95	+8=103=g
'''
encrypted_text = 'afZ_r9VYfScOeO_UL^RWUc'
decrypted_text = ""

shift = 5
for char in encrypted_text:
    decrypted_text += chr(ord(char) + shift)
    shift +=1
print(decrypted_text)

#flag{Caesar_variation}

Quoted-printable

题目附件内容:

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

解题思路:
根据题目,密文的编码方式是Quoted-printable(可打印字符引用编码),使用在线工具解密https://wtool.com.cn/quoted.html
在这里插入图片描述

Rabbit

题目附件内容:

U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI

解密思路:
根据题目是Rabbit编码,使用在线工具解密http://www.esjson.com/rabbitEncrypt.html
在这里插入图片描述

篱笆墙的影子

题目:

星星还是那颗星星哟 月亮还是那个月亮 山也还是那座山哟 梁也还是那道梁 碾子是碾子 缸是缸哟 爹是爹来娘是娘 麻油灯呵还吱吱响 点的还是那么丁点亮 哦哦 注意:得到的 flag 请包上 flag{} 提交

题目附件内容:

felhaagv{ewtehtehfilnakgw}

解题思路:
推测为栅栏密码,根据f l a g的位置,推测为两个字符一组

import sys
def fence_Passwd_burst(secret):
    res = [step for step in range(2, len(secret)) if len(secret)%step == 0]
    for step in res:
        flag = ''#获取解密结果,以step栏进行遍历获取解密后的flag
        for i in range(step):flag += secret[i::step]
        print('第%s栏: 解密结果:%s' %(str(step), flag))
if(__name__ == '__main__'):
    secret ="felhaagv{ewtehtehfilnakgw}"
    fence_Passwd_burst(secret)
#第2栏: 解密结果:flag{wethinkwehavetheflag}

RSA

题目:

注意:得到的 flag 请 将 noxCTF 替换为 flag ,格式为 flag{} 提交。

题目附件内容:

在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17
求解出d作为flga提交

解题思路:
RSA加密中,n=pq,phin=(p-1)(q-1),d=inverse(e,phin)

#方法一:gmpy2.invert()求逆元
import gmpy2
d = gmpy2.invert(e,phi)
print("d=",d)

#方法二:inverse()求逆元
from Crypto.Util.number import *
d=inverse(e,phi)
print("d=",d)

求出d的值为125631357777427553

丢失的MD5

题目附件md5.py:

import hashlib   
for i in range(32,127):
    for j in range(32,127):
        for k in range(32,127):
            m=hashlib.md5()
            m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
            des=m.hexdigest()
            if 'e9032' in des and 'da' in des and '911513' in des:
                print des

直接运行题目脚本得到des
在这里插入图片描述

Alice与Bob

题目:

密码学历史中,有两位知名的杰出人物,Alice和Bob。他们的爱情经过置换和轮加密也难以混淆,即使是没有身份认证也可以知根知底。就像在数学王国中的素数一样,孤傲又热情。下面是一个大整数:98554799767,请分解为两个素数,分解后,小的放前面,大的放后面,合成一个新的数字,进行md5的32位小写哈希,提交答案。 注意:得到的 flag 请包上 flag{} 提交

解题思路:
根据题目要求n=98554799767,分解质数http://factordb.com/
在这里插入图片描述得到因子为101999和966233
串接字符后进行md5加密https://www.cmd5.com/hash.aspx
得到d450209323a847c8d01c6be47c81811a

大帝的密码武器

题目附件下载:

公元前一百年,在罗马出生了一位对世界影响巨大的人物,他生前是罗马三巨头之一。他率先使用了一种简单的加密函,因此这种加密方法以他的名字命名。
以下密文被解开后可以获得一个有意义的单词:FRPHEVGL
你可以用这个相同的加密向量加密附件中的密文,作为答案进行提交。

密文:ComeChina

解题思路:
罗马大帝联想到凯撒大帝,则对应凯撒密码。根据题目的密文FRPHEVGL,相同的加密向量则代表是加密中的偏移量。

def caesar_cipher_encrypt(text, shift):
    encrypted_text = ""
    for char in text:
        # 检查字符是否为字母
        if char.isalpha():
            # 判断字符的大小写
            base = ord('A') if char.isupper() else ord('a')
            # 加密字符
            encrypted_char = chr((ord(char) - base + shift) % 26 + base)
            encrypted_text += encrypted_char
        else:
            # 非字母字符直接添加到加密文本中
            encrypted_text += char
    return encrypted_text

def caesar_cipher_decrypt(encrypted_text, shift):
    return caesar_cipher_encrypt(encrypted_text, -shift)

#循环解密
encrypted_text = 'FRPHEVGL'
for i in range(26):
    decrypted_text = caesar_cipher_decrypt(encrypted_text, i)
    print("偏移量:",i,"解密得:", decrypted_text.lower())

在这里插入图片描述
偏移量13时,得到的字符是一个有意义的单词security

#对明文加密
plaintext = 'ComeChina'
shift = 13	#偏移量
encrypted_text = caesar_cipher_encrypt(plaintext, shift)    #加密得到的密文
print("加密后:", encrypted_text)

rsarsa

题目附件下载:

Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters for the RSA algorithm.
p = 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q = 11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e = 65537
c = 83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034
Use RSA to find the secret message

解题思路:
根据RSA算法,n=pq,phi=(p-1)(q-1),d是e关于phi的逆元,解密m=(c^d) mod n

p =  9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297777160200625281665378483
q =  11874843837980297032092405848653656852760910154543380907650040190704283358909208578251063047732443992230647903887510065547947313543299303261986053486569407
e =  65537
c =  83208298995174604174773590298203639360540024871256126892889661345742403314929861939100492666605647316646576486526217457006376842280869728581726746401583705899941768214138742259689334840735633553053887641847651173776251820293087212885670180367406807406765923638973161375817392737747832762751690104423869019034

from Crypto.Util.number import *
n = p*q
phi = (p-1)*(q-1)
d = inverse(e,phi)
m = pow(c,d,n)
print(m)
#5577446633554466577768879988

Windows系统密码

题目附件下载:

Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
ctf:1002:06af9108f2e1fecf144e2e8adef09efd:a7fcb22a88038f35a8f39d503e7f0062:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SUPPORT_388945a0:1001:aad3b435b51404eeaad3b435b51404ee:bef14eee40dffbc345eeb3f58e290d56:::

没有思路,查了一下,直接对里面的32位的哈希进行解密
在这里插入图片描述

在ctf里面的第2个哈希值能解出有效值

  • 26
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值