TEXT の暗号化

C# で TEXT(string) を暗号化して UTF-8 で書き出します。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. Text Data を乱数を使って、暗号化するプログラムです。
    暗号化された Text File が "C:\TMP\encode.txt" の名前で書き出されます。
    30 ~ FF のコードを乱数で置き換えるだけなので、テキストエディタなどで開くことが出来ます。
    一見しただけでは判読出来なくなるのですが、簡単な暗号化なので保証の限りではありません。
    あなたも解読に挑戦してみて下さい。 (^_^;)
  2. 乱数を使う暗号化では、乱数の発生方法が重要なファクターになるので、自前の乱数を発生する関数を作成しました。
    5041 や 13 は、擬似乱数を発生させるための値です。
        // 乱数を発生する
        public static uint random(uint n)
        { return (n * 5041 + 13); }
    
  3. Shuffle() は 30 ~ FF の変換テーブルを混ぜ合わせる関数です。
    パラメータで渡された val をキーにして、m_et[] にシャッフルして格納します。
    val の値によって m_et[] の値が決まり、val はパスワードを使って設定します。
        // 30(48)~ FF(255)の変換テーブルを作成
        public static void shuffle(uint val)
        {
            uint i, j;
            for (i=0; i<208; i++) m_et[i] = 0;
            for (i=0, j=val; i<208; i++)
            {
                for(j=random(j)%208; m_et[j]!=0; j=(j+1)%208) ;
                m_et[j] = (byte)(i+48);
            }
        }
    
  4. 暗号化する encode() 関数です。
    キャラクター配列で渡された文字列を暗号化します。
    char chr を byte* byt でポイントして e_cvt() 関数を呼び出します。
    e_cvt() では 48 以上のコードを m_et[] テーブルを参照して置き換えます。
    C# では char は2バイトで構成されます。
        // Encode
        public static void encode(char[] msg)
        {
            char    chr;
            byte*   byt;
    
            byt = (byte*)&chr;
            for(int i=0; i<msg.GetLength(0); i++)
            {   chr = msg[i];
                e_cvt(byt);
                msg[i] = chr;
            }
        }
    
        // byte 変換
        public static void e_cvt(byte* pt)
        {
            for (int i=0; i<sizeof(char); i++)
            {
                if (*(pt+i)>=48)    *(pt+i) = m_et[*(pt+i)-48];
            }
        }
    
  5. Main() 関数では、ポインターを使うので unsafe を設定して下さい。
    unsafe の設定は Pointer を使う を参照して下さい。
    m_str はテストのために仮に設定した文字列です。
    string に対して byte* は使えないようなので char[] に変換して encode() に渡します。
    Encode された TEXT を "C:\TMP\encode.txt" に書き出しているので確認して下さい。
    using System;
    using System.IO;    // for File, StreamReader
    using System.Text;  // for Encoding
    
    unsafe class console
    {
        static string m_str=
        "0189abcxyzABCXYZ!#$%&'()=~|`{+*}<>?_\n01abABあいアイ\n日月火水木金土小吉女房沢口康子声捜査官智代美";
        static byte[] m_et = new byte[208];
    
        public static void Main()
        {
            StreamWriter writer;
            uint   val = 123;
            shuffle(val);
            char[] msg = m_str.ToCharArray();
            Console.WriteLine(msg);
            encode(msg);
            Console.WriteLine(msg);
    
            string str = new string(msg);
            writer = new StreamWriter("C:\\TMP\\encode.txt", false, Encoding.UTF8);
            writer.Write(str);
            writer.Close();
            Console.ReadLine();
        }
    

[Next Chapter ↓] TEXT の複合化

超初心者のプログラム入門(C# Frame Work)