换表base64
str1 = "5Mc58bPHLiAx7J8ocJIlaVUxaJvMcoYMaoPMaOfg15c475tscHfM/8==" #str1是要解密的代码
string1 = "qvEJAfHmUYjBac+u8Ph5n9Od17FrICL/X0gVtM4Qk6T2z3wNSsyoebilxWKGZpRD" #string1是改过之后的base64表
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
print (base64.b64decode(str1.translate(str.maketrans(string1,string2))))
[NISACTF 2022]string
关键在这,srand(seed)
srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int v4;
int seed = 0x2766;
srand(seed);
for ( int m = 0; m < 13; ++m )
{
v4 = rand();
printf("%d", (unsigned int)(v4 % 8 + 1));
}
}
加上NSSCTF
[SWPUCTF 2021 新生赛]re2
s2 = 'ylqq]aycqyp{'
flag = ''
for i in range(len(s2)):
for j in range(256):
if (j <= 96 or j > 98) and (j <= 64 or j > 66):
k = j
j = j - 2
else:
k = j
j += 24
if j == ord(s2[i]):
flag += chr(k)
print(flag)
直接暴力破解
注意如果是a,则会进入else,即ord(a) + 24 --> 121 --> y { 经过运算后是一样的结果
所以我的脚本会将a和{一起输出
a{nss_ca{esa{r}
这里可以猜测i一下边上的是俩括号 中间的是a
正确为{nss_caesar}