- ベストアンサー
VBで簡易シーザー暗号の作成・解析ツール
- VBで作成した簡易シーザー暗号のツールを解析しています。
- アスキーコードを使用し、任意の数値のズレで暗号化や復号化ができます。
- 現在のプログラムは暗号化のみで、うまく作動しないため、修正方法を教えてほしいという相談です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>zure01,zure02をDoubleで宣言しているところはintegerやlongを使う方が良いのですか? zure01,zure02は何文字分ずらすかを示す変数だと思うのですが、違いますか?そうなら値は整数しか取らないことになります。整数しかとらないのでしたら基本的には整数型か長整数型で宣言します。 初心者ならこちらの方がわかりやすいかもしれません。 Private Sub Command1_Click() '暗号化ボタン strSMoji = Text1.Text counter1 = Len(strSMoji) strEMoji = "" For i = 1 To counter1 '入力用の文字列を1文字ずつ処理します。 intSCode = Asc(Mid(strSMoji, i, 1)) 'Mid関数で1文字ずつ入力文字列を取り出し、その文字コードを得ます If intSCode <= 121 Then '121以下であるなら strEMoji = strEMoji & Chr(intSCode + zure01) Else intHami = intSCode + zure01 - 97 intAmari = intHami Mod 26 strEMoji = strEMoji & Chr(intAmari + 97) End If Next i 'Debug.Print strSMoji; "=>"; strEMoji Text2.Text = strEMoji End Sub
その他の回答 (1)
理解しがたい点が多々ありますので、一応理解できた範囲だけです。換字のロジック自体はそのままです。 ソースだけ示されても意図がよく分からないことがあるので、言葉で説明して頂く方がよろしいかと思います。 Dim i As Long 'これをDim文の最後に追加 Option Explicit Private Sub Command1_Click() '暗号化ボタン strSMoji = Text1.Text counter1 = Len(strSMoji) strEMoji = strSMoji '一旦出力用の文字列を入力文字列と同じにします。単に同じ長さの文字列にしたいという意図です。 For i = 1 To counter1 '入力用の文字列を1文字ずつ処理します。 intSCode = Asc(Mid(strSMoji, i, 1)) 'Mid関数で1文字ずつ入力文字列を取り出し、その文字コードを得ます If intSCode <= 121 Then '121以下であるなら Mid(strEMoji, i, 1) = Chr(intSCode + zure01) 'Mid関数で出力用文字列を1文字書き換えます Else intHami = intSCode + zure01 - 97 intAmari = intHami Mod 26 Mid(strEMoji, i, 1) = Chr(intAmari + 97) End If Next i 'Debug.Print strSMoji; "=>"; strEMoji Text2.Text = strEMoji End Sub 疑問点: zure01とzure02をDoubleで宣言しているところ(何故整数型・長整数型にしないのでしょうか?) counter2 = Len(counter1) 何を意図しているのか理解しかねます strSMoji = Mid(strSMoji, intSCode, [length]) 同上 If strSMoji >= 1 Then 同上 Loop Until counter2 = counter1 Doの中でcounter2を設定していないので、終了条件を満たさない(無限ループするのでは?) また、換字の範囲チェックはもっと厳密に行うべきだと思います。(アルファベットのみに限定するのが適当かと思います)
お礼
迅速でご丁寧な対応、ありがとうざいます。 まだプログラムを触り始めて1ヶ月経っておらず、参考書片手に見よう見まねで組んでいるので何かと不適切な箇所も多々あるかと思います。 疑問点についてなのですが・・・ zure01,zure02をDoubleで宣言しているところはintegerやlongを使う方が良いのですか? 上記で教えて頂けたところを参考に手直ししてみます。 本当にありがとうございます。
お礼
rebellion様 何度も教えていただき、ありがとうございます。 細かく指導していただき、問題が解決いたしました。 迅速で丁寧な対応にとても感謝しています。 本当にありがとうございました。