first_letter是随机生成大于64的数取余26再加97,任何一个大于64的数取余26范围都在0-25,所以first_letter的值在97-122之间
其它的加密过程
因为first_letter和user_string都是未知的,所以我们爆破求解,输出的flag不仅乱码,还越界了。检查代码,发现first_letter是个固定的值不是数组。
这个first_letter的值要使每一个(first_letter+differences[i])^user_string的值都为0,好绕啊。
手工修改每一次first_letter参与运算的值,试到108时得到了一个像样子的user_string。从97试到108还行吧~~~菜鸟不懂那些大佬怎么知道random()生成的就是108,有了解的希望评论教教我
附代码:
1 differences=[0, 9, -9, -1, 13, -13, -4, -11, -9, -1, -7, 6, -13, 13, 3, 9, -13, -11, 6, -7] 2 3 j=0 4 5 for t in range(10): 6 7 for i in range(65,126): #user_string 8 9 out1=108+differences[j] 10 11 out2=out1^i #得到result 12 13 #print("out2",out2) 14 15 if( out2==0): #加了一个just_a_string又减去了所以result的值是0才对 16 17 j=j+1 18 19 print(chr(i),end='')