目录
[SWPUCTF 2021 新生赛]fakebase
tmp += str(bin(ord(i)))[2:].zfill(8):
将字符串 flag
中的每个字符转换为对应的 8 位二进制字符串,并将它们拼接在一起,得到一个长度为 8 * len(flag)
的二进制字符串
b1 = int(tmp,2)
int()
函数接受两个参数:第一个参数是要转换的字符串,第二个参数是转换后的进制数,将二进制字符串转换为整数。
while b1//31 != 0:
s += s_box[b1%31]
b1 = b1//31
使用一个自定义的字符串 s_box
作为字符集,将 b1
转化为对应的 31 进制字符串 s
。在这个过程中,每次取 b1
对 31 取余数,并在 s_box
中查找对应的字符添加到 s
的最前面。然后将 b1
除以 31,继续进行处理,直到商为 0 为止。
for i in s:
s_box.index(i)
得到s中字符在s_box中对应的索引所组成的序列
因为b1是ASCII,最大不超过128,128/31==4
,k<=4.,因为我们是从0开始爆破,因为b1是从大每次整除31
,依次减小的,因此我们s
选好 是需要逆序。
b1
是表示一个整数的二进制字符串,则 int(b1)
将其转换为十进制整数。
接着,n2s
函数将这个十进制整数转换为了相应的 ASCII 字符串。
import libnum
s = "u#k4ggia61egegzjuqz12jhfspfkay"
s_box = 'qwertyuiopasdfghjkzxcvb123456#$'
for k in range(5):
b1 = k
for i in s[::-1]:
b1 = b1 * 31 +s_box.index(i)
print(libnum.n2s(int(b1)))
运行结果
[HUBUCTF 2022 新生赛]simple_RE
第一种方法:发现密文以及自定义base加密表,直接在线解密
第二种脚本
import base64
str1 = "5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOfg15c475tscHfM/8=="
string1 = "qvEJAfHmUYjBac+u8Ph5n9Od17FrICL/X0gVtM4Qk6T2z3wNSsyoebilxWKGZpRD"
string2 = "ABCDEFGHIJKLMNOPQRS