はじめに
気になってた picoCTF をはじめてみた 手始めにいくつか問題といたんだけどcryptoの1問め?のMod 26がおもしろかったのでメモ
こういうプログラムパズルみたいなのめっちゃ好きなんだよな
ちなみにネタバレを含むので自分で解きたい人はブラウザバック(死語)してください
Mod 26の問題
Cryptography can be easy, do you know what ROT13 is? cvpbPGS{arkg_gvzr_V'yy_gel_2_ebhaqf_bs_ebg13_uJdSftmh}
解説
というわけで文字をずらしましょう。picoCTFはflagの形式が picoCTF{XXX}
の形式になるっぽい。先頭の cvpbPGS
はずらすと picoCTF
となるのでやはりそのとおりにやれば良いっぽい
素朴にガーッとかいて実行
package main import "fmt" func main() { str := "cvpbPGS{arkg_gvzr_V'yy_gel_2_ebhaqf_bs_ebg13_uJdSftmh}" fmt.Println(rot13(str)) } var lower = "abcdefghijklmnopqrstuvwxyz" var upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" func rot13(str string) string { var result string for _, v := range str { char := v if v >= 'A' && v <= 'Z' { alphabetIdx := int((v - 'A' + 13) % 26) char = rune(upper[alphabetIdx]) } if v >= 'a' && v <= 'z' { alphabetIdx := int((v - 'a' + 13) % 26) char = rune(lower[alphabetIdx]) } result += string(char) } return result }
実行すると picoCTF{next_time_I'll_try_2_rounds_of_rot13_hWqFsgzu}
が得られる。
この値を入力すると問題はクリアです(ちなみに末尾の乱数っぽいのは回答者ごとに異なるっぽい)
この文章も遊び心があって、つぎはこの文字を2回rot13にかけてごらん?といってるんですが2回実行すると26 mod 26は0なのでもとに戻ります。(ボケッとしてて実際に2回やって同じやんけガッハッハとなった)