tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
文字の移動検索(VB6.0) ( No.0 )  [親スレッドへ]
日時: 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
※エラー処理は含めていません




 [スレッド一覧へ] [親スレッドへ]