- 日時: 2009/12/27 15:37
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[文字列処理][][] * * キーワード:アルゴリズム,位置変え,,,, * ***********************************************************************************
文字の移動検索 投稿者:桃 [1998/11/23(月)2:32分]
私は、初心者ですが、あるプログラムを作りたいと思っています。 登録してある文字暗号化のように、検索できるようなプログラムです。 例えば、a〜zまでコレクションで書き込んでおきます。 そして、テキストボックス1に”abc”と入力し、テキストボックス2に 2と入力すると、テキストボックス3へ2文字ずつずれた、”cde”を出力させる できるプログラムを作成したいのです。 できたら、好きな文字を書き込み可能になるように、コレクションでなんとか 作ることはできないでしょうか?
★★ 上記質問に対する回答のサンプルです ★★
---------------------------------------------------------------------- Re:文字の移動検索 投稿者:ゆう(U) [1998/11/25(水)13:26分] ----------------------------------------------------------------------
以前V友でReした内容をそのまま掲載します。 Text2の数値でシフトさせる値を決定しています。 Forループ内で一定の数値変換を行う事で他人による解読を 難しくさせています。 Forループ内の変数kの計算をしない様にすると、ご希望の 処理になると思います。
●ここから 変換テーブル "0123456789ABCDEF" 暗号化 (位置 + α) Mod Len("0123456789ABCDEF") 解読 (位置 - α) Mod Len("0123456789ABCDEF")
※テーブルも乱数で並べ替えとか・・・
サンプル) テキストボックス4つ(Text1,Text2,Text3,Text4) コマンドボタン1つ(Command1)
Text1へは"0"〜"9"、"a"〜"f"、"A"〜"F"の半角文字をText2へは 乱数の基数を入れてコマンドボタンをクリックして見て下さい。
Private Sub Form_Load() Text1.Text = "AB123" Text2.Text = "7" Text3.Text = vbNullString Text4.Text = vbNullString End Sub Private Sub Command1_Click() Const strTable = "0123456789ABCDEFabcdef" '変換テーブル1 'Const strTable = "f0CA345d6c7F9ab2B1DeE8" '変換テーブル2 Dim i As Long, j As Long, k As Long
With Text3 k = CLng(Text2.Text) .Text = vbNullString For i = 1 To Len(Text1.Text) k = CLng(Int(Left$(CStr(k ^ 2), 4) + 0.5)) j = InStr(strTable, Mid$(Text1.Text, i, 1)) - 1 j = ((j + k) Mod Len(strTable)) + 1 .SelStart = Len(.Text) .SelText = Mid$(strTable, j, 1) Next i End With
With Text4 k = CLng(Text2.Text) .Text = vbNullString For i = 1 To Len(Text3.Text) k = CLng(Int(Left$(CStr(k ^ 2), 4) + 0.5)) j = InStr(strTable, Mid$(Text3.Text, i, 1)) - 1 j = ((j + Len(strTable) * 1000& - k) Mod Len(strTable)) + 1 '↑kが大きくなりすぎる場合を想定して .SelStart = Len(.Text) .SelText = Mid$(strTable, j, 1) Next i End With End Sub ※エラー処理は含めていません
|