通过一些CTFs任务,我偶然发现了一个有趣的挑战。下面的程序将接收包含单行随机字母数字字符(flag)的flag文本文件。将通过随机字符旋转运行它并返回一个字符串
import random,string
flag = "FLAG:"+open("flag", "r").read()[:-1]
encflag = ""
random.seed("random")
for c in flag:
if c.islower():
#rotate number around alphabet a random amount
encflag += chr((ord(c)-ord('a')+random.randrange(0,26))%26 + ord('a'))
elif c.isupper():
encflag += chr((ord(c)-ord('A')+random.randrange(0,26))%26 + ord('A'))
elif c.isdigit():
encflag += chr((ord(c)-ord('0')+random.randrange(0,10))%10 + ord('0'))
else:
encflag += c
print "Unguessably Randomized Flag: "+encflag
输出:BNZQ:1l36de9583w5516fv3b8691102224f3e
有人能解释这能解决吗?你知道吗
作为随机种子,它应该产生相同的范围流。因此,您可以使用相同的函数,但应更改:
进入
所有三条线。你知道吗
这应该是可行的——除非有人用一种不同的、更有效的算法来代替
random
,至少要改变种子的处理方式,等等这是一个用
random
实现的坏流密码,不要用它来做任何严肃的事情。而且,由于使用非加密RNG而不是流密码是相当愚蠢的,即使对于加密演示代码,我也不会将其用于学习目的。你知道吗相关问题 更多 >
编程相关推荐