VBでシーザー暗号解読/作成の考え方・ソースコード[Visual Basic/VB.NET]

visualbasicシーザー暗号解読作成 PC関係

プログラミングの勉強をしていると後輩に話したら、「ある程度(繰り返し処理)まで学習が進んだら、シーザー暗号を解くプログラムを作るのがおすすめです。」と言われた。

すげー大変で、めちゃくちゃ調べながら20時間くらいかかったけど、なんとなく出来た。絶対もっと慣れてから勧めないといけない難しいやつ…。

解読の仕方や考え方などを書き出してみる。ソースコードを置いておくが、最後のあたり(最後どころか全体的に)あんまり自信がない。まじで初心者が書いたものなので注意。

シーザー暗号とは

シーザー暗号wikipedia

シーザー暗号は単一換字式暗号の一種で、平文の各文字を、辞書順に3文字分シフトして暗号文を作る暗号である

難しく書いてあるが、”特定の文字数分だけずらす”という暗号。アルファベットで、”APPLE”を1文字ずらすとしたら”BQQMF”になるよ。っていう暗号。

問題文とプログラム作成の考え方

・問題文はFRQJUDWXODWLRQV BRX KDYH VXFHHGHG WR GHFUBSW WKH FHDVDU FLSKHUとなる。

これの解読に励む。考え方としては単純。アルファベットを1文字ずつずらした場合、2文字ずつずらした場合…25文字ずつずらした場合をすべて作成、意味がわかる文字列が正解(アルファベットは全部で26種類なので、25通りでよい。26字ずつずらしたら元の文と同じ。)。先ほど勉強した繰り返し処理を使うことは容易に想像できる。

・当然のことながら、文字(アルファベット)では計算ができない。アルファベットを数字に直す必要がある。(数字に直さず、なんか配列の考え方でもできそうだけど、配列今は難しくてわからん。)

・PCは(極端な話)、二進数しか扱えない(0or1)。つまり文字データも二進数(数字)で表現されるはず。検索すると、ASCIIコード表を発見。これをもとに、今回の問題文”大文字アルファベット”に対応する数字を確認。アスキーコードだと”A”が”65″…”Z”が”90″に対応している。

・それぞれの値にそれぞれ足し算してやればいい。”AB”を1ずらすとしたら、”65+1 66+1”となる。ただ、91からZでなくなる(アスキーコードで”91″は”[“)、90(Z)のつぎは65(A)になるようにしなければならない。…ピンと来たぞ。これが条件分岐だ。あぁ、大変。

解法

難しく考えても全く手が進まなかった。できることを一つずつやっていこう。

とりえず、1ずつずらした場合のみを考えて解いてみる。テキストボックスに入力された文字列・文字数を取得する必要がある。

そして、入力された文字を数字に変換する必要がある。そして+1を計算。その後また文字列に変換してリッチテキストボックスに出力。…という具合。

コメントごちゃごちゃ書いてあって、見づらいと思うが、ご容赦を。ソースコードもあやふやで、合っている自信がない…。

 

※なかなかリッチテキストボックスに出力する関数がわからなかったけど、richtextbox1.と打った後に、使える関数一覧がVsiual studioで表示される。そこでappendtext発見。web検索してメソッドなどを探すより、ヘルプ見た方が分かりやすいのでは?

 

・・・
・・

そしてここまでできると、後もできる。足す数に気をつけて、1から25回繰り返し処理すればいい。暗号解読完成形↓

 

暗号作成も全く同じやり口で。暗号化したい原文をテキストボックスに入力。リッチテキストに暗号化された25通りの暗号文が作成される。

 

・・・

・・

 

 visualbasicシーザー暗号解読作成

タイトルとURLをコピーしました