一个按照密钥表加密的程序
呵呵,小弟我第一次写博文,而且实力还一般化,还请各个大侠们多多提出宝贵意见。
最近有个同学要做一个按照密钥表加密的程序,
下面是密钥表:
W3*25D&e@KqQ%nE(ofH8^9]yi$.c?a0!ZV-Shqe6EGhams7dfLKAu,nh1BSDFi45w
每个字符转换后的数字是:取各个字符的所在index+1;
char[] before = "W3*25D&e@KqQ%nE(ofH8^9]yi$.c?a0!ZV-Shpb6EGgTms7dtLkAu,Nj1BRCFI4zwjlMOxPrRYUvX".ToCharArray();
我先把密钥表中的字符串复制到一个char[]类型的变量before中;
在加密的按钮中添加事件:
char[] text = textBox1.Text.ToCharArray();
StringBuilder sbr = new StringBuilder();
for (int i = 0; i < text.Length; i++)
{
object txt = EncFunction(before, text[i]);
sbr.Append(txt);
if (txt.ToString() == " ")
sbr.Remove(sbr.Length - 2, 1);
}
sbr = sbr.Remove(sbr.Length - 1, 1);
textBox2.Text = sbr.ToString();
首先将textBox1中Text复制到一个char[]类型的变量text中;然后一个for循环;
在这个循环中,有一个方法:EncFunction(Array arr, object obj),是返回要显示出的数字加一个'.',
private string EncFunction(Array arr, object obj)
{
int index = Array.IndexOf(arr, obj);
return index == -1 ? " " : (index + 1).ToString() + ".";
}
一个一个的追加到stringbuilder中,最后退出循环,赋值。
输入:www www
显示:111 111
接下来是解密:
通过把数字-1传进去,返回出before数组中指定index的值
StringBuilder sbr = new StringBuilder();
string[] str1 = textBox2.Text.Split(' ');
for (int y = 0; y < str1.Length; y++)
{
string[] str2 = str1[y].Split('.');
for (int z = 0; z < str2.Length; z++)
sbr.Append(before[int.Parse(str2[z]) - 1]);
sbr.Append(" ");
}
sbr.Remove(sbr.Length - 1, 1);
textBox3.Text = sbr.ToString();