(TUCTF2016)The Neverending Crypto Level 2~(Crypto10~)
Level2以降は、似たようなものが続きます。アルゴリズムはたいして難しくないので手間と時間の戦いです。
pythonコードは汚いので紹介だけです。
■Level2(10)
abcz ! ABC encrypted is nop(-.-NOP
Level1とほぼ同じで、平文と暗号化の対応関係が変わっただけ。
abcdefg・・・
nopqrstu・・・
今度はシーザー暗号のRot13。
正確には、アスキーコードで13足したうえで、126を超えた場合は、アスキーコードの32に戻る。
ENC = PLAIN +13
if(ENC > 126) ENC = ENC-126+31
また50問でした。
■Level3(10)
abc defghijklmnopqrst encrypted is abc sftdhuneimky;qprg
abc defghijklmnopqrst encrypted is abc sftdhuneimky;qprg
abc defghijklmnopqrst encrypted is axj e.uidchtnmbrl'poy
abc defghijklmnopqrst encrypted is abc sftdhuneimky;qprg
abc defghijklmnopqrst encrypted is axj e.uidchtnmbrl'poy
暗号パターンが2種類になります。Roundごとに、abcを入力して、その暗号結果でリストを切り開けて使えばOK。
Plain = "abcdefghijklmnopqrstuvwxyz "
Encパターン1 = "axje.uidchtnmbrl'poygk,qf; "
Encパターン2 = "abcsftdhuneimky;qprglvwxjz "
■Level4(10)
abc encrypted is RST
abc encrypted is uvw
abc encrypted is FGH
rot(n)の暗号。nの値が毎回変わるので、Roundの最初にaを入力して、何個rotされているかを調べてリストを作ってしまえばOK。
例:N=2の場合
Plain = abcdefg・・・
Enc = cdefghi・・・
■Level5(10)
abc encrypted is >=<
rot(n)のリバース。計算式さえ思いつけばLevel4の計算式をちょっといじるだけ。
Plain = abcdefg・・・
Enc = jihgfed・・・・
こんな感じ
PlainOf('X') = ord('a') - (ord('X')) - ord(ENC('a')) )
(nが固定なことには後で気づいた)
■Level6(50)
abc encrypted is quy
qrstuvwxyz encrypted is gikmoqsuwy
rot(n)した上でm文字飛ばし。n,mはroundごとに毎回変わるので暗号結果を見て計算。
■Level7(50)
土曜しか参加できなかったので時間切れ。ついに一対一の静的写像ではなくなった模様。