呵呵,小弟我第一次写博文,而且实力还一般化,还请各个大侠们多多提出宝贵意见。
最近有个同学要做一个按照密钥表加密的程序,
下面是密钥表:
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();
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() + " . " ;
}
{
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();
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();