アイジア

CTF, 情報セキュリティの学んだことメモ

ksnctf 22 Square Cipher

ksnctf.sweetduet.info 問題文の31×31のアルファベットはQRコードを表しています。小文字が白い部分、大文字が黒い部分です。

アルファベットをQRコードに直す

QRコード作成には画面描画に特化した言語であるProcessingを使います。

final int size = 10;  //QRコードのサイズを指定

background(255);
size(310, 310);
fill(0);


String cipher = "oomktvziqtaovmmpxzoqrzsxlpwpgojuDQEMISYnnVYnvyWRhHsDXnSCXAVVZjtZbknedErdpvAwQWpUiLqOxIqpafvXpdXoAVWcKppbEPuaqmXWjXJwRoRFOoEgpDiRUXlQjKJlslskVpGwtljGyVJPxHvbQsQNKxCsdYMdQPJiBmyrsuOrJQOtXgpMekeinUaMoDXqFzweLKipkBuggnsUveQFYCJSKfBgHaJgZnZoWmOmAOJLVQHihljrplajyKNXtwmfOjRwOqcqeeplyzygkFOltsOyrPgIaerIaSjQQaVMyEhfydvEaRHbBzfrcwJbCZmHdddLpuEJwspbtsXQGkwpKaTZmWJiZzpbkpHNiToawxKnwJpIKbGhnLjVAJNcxrqkKEJCKCOocSvmTRDNDpFtRUmcHoRELeSqXoGUIIsuYuajeHaSVlQGLaEprSQarDzTomJdAWfqbzIJLHRBXMvNDegYeaoVRDuWBbdSBtLvxIeKdAYwajGHMgRLDGgDinBiLNBgatbkHepNsCQSJjTRmQrCHYWJqIPOVAUOerrvhmZfmogPglGNuLyAuSivBctlvVfzbqBJdHUkSaTArlgkhtHPyGhXOPkwmkBqrvbzZfwvLtTnhyXVHPlwsuGZQnNiNcmyCMtAVwYVgtZHVNznolGMBETIHFmoWjwfezbysbvOzsAhxSZFFAfOouyHldEYhgNHKKSFUtcUxfRyXHMugYBtAxBwDJZhrHmsozuNeoJqyzMDHsNbUDwzaNLtdxrbVmQMHyNndOWCZLnhrPxZXCYLDTWQreaSiEEJjZtoRpUzgsxsiiGzvnRpKLMrkqTzGCKvNhUhjrmCjAdwQAvkgqHyJZLmsSxzwjxAnWesTszIxirRwcWIXUPtwwanTDEMTRGyhzdCtkTTDWbxdSjsNYlfXzeawtidzosgaofjxxyfcdoiulemirqap";
int i,j;
char c1;

for(i=0; i < 31; i++){
  for(j=0; j < 31; j++){
    c1 = cipher.charAt(i*31 + j);
    if(int(c1) < 97){  //大文字なら四角形を描画
      rect(j*size, i*size, size, size); 
    }
  }
}


実行結果

f:id:favoritte15:20181202155941p:plain

Processingのすすめ

Processing.org
Processingは、
・「おまじない」がなくわかりやすい
・実行方法が簡単でコンパイルが高速
・文法がJavaベースなので癖がなく理解しやすい
・簡単に画面描画できるため楽しい(ゲームとかもすぐ作れる)
等の強みがあり、初心者にもおすすめです。