ホーム | アプリケーション | Tips | ダウンロード | プログラム | コラム

CBアプリ工房


アプリケーション > 暗号化ソフトって難しそう?[ 1 | 2 ]

暗号化ソフトって難しそう? - 2/2

更新 : 2009/12/15

 


Ascii 関数は、文字列をずらす計算をするために、キャラクタを ASCII コードに変換する関数です。


//------------------------------------------------------ 
//
// 機能 :キャラクタを ASCII 文字に変換する
// 引数 :str(キャラクタ)
// 戻り値:ASCII コードの番号を返す
//  備考 :キャラクタに対応する ASCII コード番号を返す
//
//------------------------------------------------------
int __fastcall TForm1::Ascii(AnsiString str)
{
    char buf[1];
    sprintf(buf, "%d", str[1]);//文字を取得
    return (StrToInt(buf));    //数値に変換
}

次にコンストラクタで、各 コンポーネントに表示される文字列を考慮しておきます。
たとえば、Momo ならば WordWrap を false に ScrollBars を ssBoth などに設定しておきます(プロパティで設定しても良いです)。


    //各コンポーネントの設定
    OrgMemo->Clear();
    OrgMemo->WordWrap   = false;
    OrgMemo->ScrollBars = ssBoth;

    KeyEdit->Text = "";

    EncodeMemo->Clear();
    EncodeMemo->WordWrap   = false;
    EncodeMemo->ScrollBars = ssBoth;

    ResultLabel->Caption = "";

メインの暗号化の処理です。

暗号化の処理は、
     (1) 最初の文字を ASCII コードに変換。
     (2) 暗号キーの左桁の数値を (1) から引く。
     (3)  (2) の数値を文字に戻す。
これを繰り返すことで暗号をかけていきます。

例をあげますと、暗号キーが "3127" だったら、最初の文字は 3 ずらして、次の文字は 1 ずらしていきます。"7" まできたら、最初に戻って "3" を引きます。これを繰り返して暗号をかけていくというわけです。


void __fastcall TForm1::CommonBtnClick(TObject *Sender)
{
    iint h, i, j, len;
    char move[20];
    AnsiString src = "", dest;

    //処理するかどうかチェック----------------
    //オリジナルの文字列がなければ処理を中止
    if (OrgMemo->Lines->Count == 0) return;

    //暗号キーの桁数
    len = KeyEdit->Text.Length();
    //キーワードが 0 あるいは 20 以上ならば処理を中止
    if (len == 0 || len > 20) {
        ShowMessage("パスワードが不正です。");
        return;
    }
    //----------------------------------------

    //暗号キーの数字を 1 桁ずつ取り出す
    for (i = 0; i < len; i++)
        move[i] = (char)StrToInt(KeyEdit->Text.SubString(i + 1, 1));

    //暗号化
    EncodeMemo->Clear();
    for (h = 0; h < OrgMemo->Lines->Count; h++) {
        src = OrgMemo->Lines->Strings[h];

        //src の文字列を ASCII コードに変換し、暗号キーから取り出した
        //数字分だけ引いてその値を文字列に変換する。
        //(暗号キーの各桁の数字分ずつずらすことで暗号をかけている)
        j = 0;
        dest = "";
        for (i = 1; i <= src.Length(); i++) {
            dest = dest + Chr(Ascii(src.SubString(i, 1)) - move[j]);
            if (i % len == 0) j = 0;
            else j++;
        }
        EncodeMemo->Lines->Add(dest);
    }
    
    ResultLabel->Caption = "暗号化されました。";
}

コンパイルして実行すると暗号化ツールができあがります。
任意の文字列をオリジナル文字列に入力して、暗号化を試してみてください。
暗号化ソフトの作成はこれで終わりです。お疲れ様でした。



今後の課題
今回作成した暗号化ツールは、基本的な動きしか記述していません。実際に使うにはもう少し工夫する必要があります。

いろいろなアルゴリズムを試して解読されない暗号化ツールを作ってみてください。



暗号化の方法にアレンジを加えたフリーウエア Cryptic がダウンロードできます。参考にしてください。イメージ画像を貼り付けておきます。

暗号化/復号化ソフト Cryptic

以上のコードは、ご自由にお使いいただいて結構です。ただし、コードを使用した結果、問題が生じても責任はいっさい負いかねますのでご了承ください。



[ ホーム | ページトップ | 前へ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.