polarctf-crypto中等难度wp整理(截止至2024.12)
二进制
一个音频文件,听了,不是摩斯电码看了wp,原来是拨号
考察:DTMF拨号音识别
使用dtmf2num这个工具解析这个音频
二进制1和0
但是不是,它是01字符变形成摩斯密码,把0替换成.,把1替换成-,把*替换成空格。
得到一组摩斯电码,然后去解即可
还要小写md5加密,服了这个老六
FB
百度识得这是斐波那契数列
将"VERAYTRGUYTLOUYTFDRKONMLKJOPGF65DD
"作为字典
首先我们来了解一下斐波那契数列的简单定义:
一个数列:0,1,1,2,3,5,8,13,21,34,55,89……这个数列从第3项开始 ,每一项都等于前两项之和。
那么我们从1开始为字典排序,0不代表任何,即序号1、2、3代表了字典的前三个字母VER,后面按序入座
而flag的组成内容则按照斐波那契数列规则组成:
因为字典只有34位,所以序号1,1,2,3,5,8,13,21,34所对应的字母或数字排列而成了flag内容
包上flag即可,得到
flag{VVERYGOOD}
多表替换
维吉尼亚解码,key未知,直接爆破
需要扩大key值的范围
flag{xiao zeng zui bang chong chong chong}
拒绝固定思维.
只给了一张表,010查看
题目在末尾,这我还真不知道,提取出来
gmbhvpuufnwoneusnowscrrvuwutotfnwobe
根据其他人的wp知道了这是base64换表
大佬的代码如下:
import base64
dict={0: 'J', 1: 'K', 2: 'L', 3: 'M', 4: 'N', 5: 'O', 6: 'x', 7: 'y', 8: 'U', 9: 'V', 10: 'z', 11: 'A', 12: 'B', 13: 'C', 14: 'D', 15: 'E', 16: 'F', 17: 'G', 18: 'H', 19: '7', 20: '8', 21: '9', 22: 'P', 23: 'Q', 24: 'I', 25: 'a', 26: 'b', 27: 'c', 28: 'd', 29: 'e', 30: 'f', 31: 'g', 32: 'h', 33: 'i', 34: 'j', 35: 'k', 36: 'l', 37: 'm', 38: 'W', 39: 'X', 40: 'Y', 41: 'Z', 42: '0', 43: '1', 44: '2', 45: '3', 46: '4', 47: '5', 48: '6', 49: 'R', 50: 'S', 51: 'T', 52: 'n', 53: 'o', 54: 'p', 55: 'q', 56: 'r', 57: 's', 58: 't', 59: 'u', 60: 'v', 61: 'w', 62: '+', 63: '/', 64: '='}
base64_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P','Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f','g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v','w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/']
chiper='gmbhvpuufnwoneusnowscrrvuwutotfnwobe'
flag=""
for i inrange(len(chiper)):
for j inrange(64):
if(dict[j]==chiper[i]):
flag+=base64_list[j]
print(flag)
得到flag{8277e0910d750195b448797616e091ad}
flag{8277e0910d750195b448797616e091ads}
rsa
仅提供了e,c
上脚本
RSA
还有公钥,直接导入到RSA工具,获得e、n值,yafu分解得到pq
将所需数值依次填入,计算私钥,计算明文
题目要求对明文进行md5加密作为flag提交
七夕特供
先从hint.txt入手,发现是零宽文本加密
与佛论禅,但是是与佛论禅加密版,需要箴言,即key值,网址不太好找与佛论禅加密版,上文得到的gugua大概就是key
花朵加密,这个加密类型就很好猜了
得到flag
sha
解密脚本如下
维吉尼亚解密即可
xxtea
橙色是密文,蓝色是key,xxtea解密
你知道M型栅栏密码吗?
进制转换
B二进制、O八进制、D十进制、H十六进制
写脚本跑一下,都变成十进制,转字符
import binascii
text ="H7b D97 B00110111 D57 H37 H67 D55 B00110100 D52 H31 H62 O65 O65 H33 H7d D97 D101 H66 H39 O143 B00110110 D98 H32 H65 O154 O67 B01100100 D98 H36 H30 O67 O145 D53 O146 D51 H61 H61 O145"
result =""
text2 = text.split(" ")
for i in text2:
if i[0] =="B":
result +=chr(int(i[1:],2))
if i[0] =='O':
result +=chr(int(i[1:],8))
if i[0] =='D':
result +=chr(int(i[1:],10))
if i[0] =='H':
result +=chr(int(i[1:],16))
print(result)
# {a797g7441b553}aef9c6b2el7db607e5f3aae
#B二进制、O八进制、D十进制、H十六进制
{a797g7441b553}aef9c6b2el7db607e5f3aae
M型栅栏手动解密
得到flag
flag{7e73df4a49ba6c17b60a7b5952ee5e37}
小精灵来喽
爆破不了,合着这是密码提示
维吉尼亚解密
得到压缩包密码
古精灵对照表对照
得到herec0mesthee1f
然后md5解密
要求字母大写,字母大小写转换
得到flag
flag{08460AE514ACCC54E5D8D4B690A75D29}
眼见非实
实际上不是二进制转其他,这条路走不通,眼见非实,说明不是我们所看到的二进制,看了wp发现是变形培根密码
1 -> A,0 -> B,再培根密码解码,这里可以随波逐流直接解
AAAABAAAAAAAABAABBBAABBABABAAAAAAAAABBABAAABAABAAAABBBBAABBBAABAABAAABABAAABAABAAABBAABBBAABBBAAAABB
(转成标准的培根密码)
MD5加密提交
不一样的四四方方
我们先将其重复的去掉
然后将未出现的字母按顺序补全,q先不填
题干要求将最后一位删掉,但是这样就不满足25字节数了
所以要把q补上这样就得得到了最终的key
在线加密
32位Md5小写,包上flag提交
我爱456
循环456,依次取出4,5,6位
count =1
str=""
text = [b'kseYvkasuj5618t',b'lygemfla235158jdb',b'utasvQsjdybl587t',b'sydwkuhd54kdhg',b'jtftY658qiwudhs',b'iaugwjiushyc871',b'aksQbhasbkjcbkjd',b'dvbpzd8v26dfv6f',b's6dvdNf6v52v6x',b'65dT26f5d1b6f5v',b'35f2Y6d65bbfv5',b'35dfv32d8bfv256d',b'kdhMvnhdkjzldkj',b'sdhjTujsdbch268',b'sdr26Iksds265dsv',b'jnm2dsnsdv26865']
for i in text:
if count %3==1:
str+=chr(i[3])
if count %3==2:
str+=chr(i[4])
if count %3==0:
str+=chr(i[5])
count = count+1
print(str)
# YmQwYjQzNTY3MTI2
然后base64解密
之后md5加密
得到flag
flag{b5ff0893e6522a037c144a1f502c2b48}
离家出走的猫猫
谁能想到是首藏头诗
得到明文:小明是一个福瑞控
包上flag即可
rsaaa
右上角有计算n、d
最后计算得到M值,转字符即可
将其包上flag{}提交
Hello
得到其ASCII码值7269767679(拼接一起并不常见)
模幂运算,代码如下:
# Given values
n=365354477477
e=65537
# ASCII values for 'HELLO'
ascii_values= [7269767679]
# Encrypt each ASCII value using the public key (n, e)
encrypted_values= [pow(m, e, n) forminascii_values]
print(encrypted_values)
得到flag{124198634960}
Fakeboard
ao神之力
言外之意,我们进行两次base解码,再进行一次进制解码即可
但是做的时候很懵,用随波逐流一键解码
先是一层base91
然后16进制转字符
然后就是两层base编码了
最后将其进行MD5加密提交即可
flag{caf3ebc6c7f2a20660873080ca55e541}
跟预料的多了一层base91编码
不友好的RSA
写脚本
将M值包上flag即可
官方脚本如上
bllbl的密码锁
U2FsdGVkX1+2ohXvVEyY3J2P3xS6K1uQdbmRnTd2cEYaMPNEgl/mZJuM3+KGIh46
ZeKSgkr3IVCY8GhSGWRuh9qocOLTVO9bXHVqTTkXFf6+Pn68lihnaxXfgyyS0mPY
X4YLnw8yug8OvjGRVnB9yjdXZL2rZivQSGqe4CfQqk9+Ut9rLqkogqbwpEhCG9nM
3J72KKVqGJ46l9D8YX/8S3msGcCOVBkN+CKln3+ddwUR2tE3xIC8hTLCQH2sG+LJ
ot9XSw9a/12l/YlVq5S8fMyCgdzdn8CIwRRKCOcZyUz5eoaeAPAbnE1I5J2smhVs
wsFfjJ1eR93hbm3yAJbI2HeMZhrke/KY8ixpivaL/1N7tmC2xKlfY9/p3MGzlFL5
o5mAmMG5ogkW9Rz6aM36eSr0nVQRu97Dy8ljLipEOF+wepJmxqHIcphLq0EzJjtM
F5VY1bTk6uFOjIbvQuePQiu/56cj+CP3+8I9nL0gajMZJ0oeuYXTi0n100FtznDS
A5pHnCs+7FCXFnibYhGxhylYYLOEN7evhgfNK3m+jTix+Z1oDU7KbegN0Q6nwh8v
rCwL+nWsWCoKAd/eYGkIHvt4nYcIW0DYIah8k+abADmREFSn/xr+/+x75xYrlJkD
pyxg/cKzpk+JFxPxcCVRbGk+fDUQbiL5I0am1F5jMWqEQj0OwXMxMiXjek84admP
2OABxIhf+r/DWtnlkDg+QE3w9nZCfDWrlVZSXlgSfeJCVOkVaKOaAuixCmnCeUEY
e7EroMah6ga1CqYcGaYYT1nEFpU3kVF9hGvNGy6C+EAz8P6GV+eKA8bdOrBFazD0
rNrh9ANX9C1lPr9VJmG/WfCFXSOoRksclGrAZyU94LkVqTk5OE493HTD9OHBawz8
iM92zUYPBMsuqvRf+x4RPiRTNrgubmIjxb1+4lR1p8KU6nhJuiahVDBvaWWHcvxd
I4UHggatwoF7nmxVCzuTjymEslKcn9WkDGfd2C62cxQ/fJoOsFp3qpLYPPGQksYq
1xj4AZkl8MGE5QqrGXd8MoqF/RIn3iflZ/j60nONkc3Z5RaZCQ9z0qG+7PlJSXer
得到一串加密文本,开头为U2Fsd,可能为aes或者rabbit加密
题目还让我们进行nc连接
得到提示,'bllbl'可能为key,而继续下一步需要密码
得到加密脚本
class Bllbl_crypto1:
def __init__(self):
self.char_map = "BALUINGbaluing+-"#偶吼吼吼,balalabuliang的大小写作为集合哦
self.index_map = {char: index for index, char in enumerate(self.char_map)}
def encode(self, mingwen):
b_str = ''.join(format(int(char, 16), '04b') for char in mingwen)
list_en = []
for i in range(0, len(b_str), 4):
list_4_b = b_str[i:i + 4]
index = int(list_4_b, 2)
list_en.append(self.char_map[index])
return ''.join(list_en)
# 哼~什么注释都不给你,嘿嘿,因为【害羞】~你最棒了,可不要小瞧我们的羁绊啊
密文:nInuILUauBilLUaLBgnnNBluG-bNaIlinaA+bLaglgInL-GUG-BGb-alnnAIaGLn+nninab+IiNn+L-+LaUBa-gl-Lubiu-Uua
那么接下来要写个解密脚本,这里借鉴大佬的脚本了
class Bllbl_crypto1:
def __init__(self):
self.char_map = "BALUINGbaluing+-"
self.index_map = {char: index for index, char in enumerate(self.char_map)}
def decode(self, cipher):
# 将密文字符映射回对应的 4 位二进制
binary_str = ''.join(format(self.index_map[char], '04b') for char in cipher)
# 每 4 位二进制组成一个 16 进制字符
hex_str = ''.join(hex(int(binary_str[i:i + 4], 2))[2:] for i in range(0, len(binary_str), 4))
return hex_str
# 使用解码器
crypto = Bllbl_crypto1()
ciphertext = "nInuILUauBilLUaLBgnnNBluG-bNaIlinaA+bLaglgInL-GUG-BGb-alnnAIaGLn+nninab+IiNn+L-+LaUBa-gl-Lubiu-Uua"
plaintext = crypto.decode(ciphertext)
print(f"解码后的明文: {plaintext}")
#c4ca4238a0b923820dcc509a6f75849bc81e728d9d4c2f636f067f89cc14862ceccbc87e4b5ce2fe28308fd9f2a7baf3a8
那么这里得到的明文其实就是所需要的密码了
flag{94c1ff6cadd173d446f612724f71fe9a}
幂数加密了解一下
可以使用随波逐流,幂数加密也可以指云影加密,具体区别请看幂数加密(云影加密)-CSDN博客
得到flag
flag{NEWYEAR}
本文来自博客园,作者:kriton,转载请注明原文链接:https://www.cnblogs.com/kriton/p/18630117
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步