// 乱数を発生する public static uint random(uint n) { return (n * 5041 + 13); } |
// 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); } } |
// Decode public static void decode(char[] msg) { char chr; byte* byt; byt = (byte*)&chr; for(int i=0; i<msg.GetLength(0); i++) { chr = msg[i]; d_cvt(byt); msg[i] = chr; } } // decode byte 変換 public static void d_cvt(byte* pt) { for (int i=0; i<sizeof(char); i++) { if (*(pt+i)>=48) *(pt+i) = m_dt[*(pt+i)-48]; } } |
using System; using System.IO; // for File, StreamReader using System.Text; // for Encoding unsafe class console { static byte[] m_et = new byte[208]; static byte[] m_dt = new byte[208]; public static void Main() { StreamReader reader; uint val = 123; shuffle(val); for(int i=0; i<208; i++) m_dt[m_et[i]-48] = (byte)(i+48); string str; reader = new StreamReader("C:\\TMP\\encode.txt", Encoding.UTF8); str = reader.ReadToEnd(); reader.Close(); char[] msg = str.ToCharArray(); decode(msg); Console.WriteLine(msg); Console.ReadLine(); } |
[Previous Chapter ↑] TEXT の暗号化
※・