いくつかのCTFタスクを経て、私は面白いチャレンジを見つけました。以下のプログラムは、1行のランダムな英数字(フラグ)を含むフラグテキストファイルを取り込みます。暗号化疑似ランダム
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
誰もがこれを解決することができます説明することができますか?
'seed'(" random ")と暗号化されていない文字列(" FLAG: ")の一部を知っているので、逆にしてみてください。出力を見ると、暗号化されたテキストはmd5ハッシュ(32個のアルファニューメリック文字)でなければならないと想像してください –
@tmadam OK、それはすべて小文字で、小文字よりも多くの桁を持っています。 32の16進数であり、したがってハッシュ値になる可能性があります(私はここでPythonを実行していません)。 –
* "これは誰でも解消できると説明できますか?" * - ここで何が問題なのですか?私は解決すべきことは何も見ていない。それを元に戻したいですか? –