解法一:
思路:逆向思维
储备知识:
Python中,^表示:按位异或运算符,**:幂运算(这个我之前搞混了)。
注:算术运算符(+,-)>位运算符(^)
key='Maybe you are good at decryptint Byte Code, have a try!'
#print(ord(key[5]))
#print(len(key))=55
string=[] #明文
seed = 5
enc=(75,11,7,26,164,59,246,229,85,26,18,54,224,120,233,246,163,235,93,246) #密文
oringstring=[]
for n in enc:
for i in range(31,128):
if (((i+seed^ord(key[seed]))-n)%255==0):
oringstring.append(i)
seed=(seed+1)%len(key)
# print(n)
#print(seed)
# print(i)
# print("***")
break #break要加,负责会输出22个结果,会出错
#for x in range(len(oringstring)):
#string.append(chr(oringstring[x]))
for x in oringstring:
string.append(chr(x))
print(string)
print(len(string))
运行结果:
['f', 'l', 'a', 'g', '{', 'P', 'y', 't', 'h', 'o', 'n', 'I', 's', 'F', 'u', 'n', 'n', 'y', '!', '}']
20
解法二:
思路:正向思维
enc=(75,11,7,26,164,59,246,229,85,26,18,54,224,120,233,246,163,235,93,246)
key='Maybe you are good at decryptint Byte Code, have a try!'
seed=5
string=[]
for n in enc:
for v in range(31,128):
if((v+seed^ord(key[seed]))%255==n):
seed = (seed + 1) % len(key)
# print(n)
#print(v)
string.append(chr(v))
break
print(string)
print("".join(string))
运行结果
['f', 'l', 'a', 'g', '{', 'P', 'y', 't', 'h', 'o', 'n', 'I', 's', 'F', 'u', 'n', 'n', 'y', '!', '}']
flag{PythonIsFunny!}