1、456789101112NOPQRSTUVWXYZ131415161718192021222324251.2实现过程1.2.1 程序代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace mimaxue46.FormsCl
2、ass public partial class yiwei : Form public yiwei() InitializeComponent(); private void textBox1_KeyPress(object sender, KeyPressEventArgs e) private void button1_Click(object sender, EventArgs e) textBox3.Clear(); string aa = new string26; aa0 = a; aa1 = b aa2 = c aa3 = d aa4 = e aa5 = f aa6 = g a
3、a7 = h aa8 = i aa9 = j aa10 = k aa11 = l aa12 = m aa13 = n aa14 = o aa15 = p aa16 = q aa17 = r aa18 = s aa19 = t aa20 = u aa21 = v aa22 = w aa23 = x aa24 = y aa25 = z string aa2 = new string26; aa20 = A aa21 = B aa22 = C aa23 = D aa24 = E aa25 = F aa26 = G aa27 = H aa28 = I aa29 = J aa210 = K aa211
4、= L aa212 = M aa213 = N aa214 = O aa215 = P aa216 = Q aa217 = R aa218 = S aa219 = T aa220 = U aa221 = V aa222 = W aa223 = X aa224 = Y aa225 = Z try #region int a = Convert.ToInt16(textBox1.Text); string tx = textBox2.Text; int le = tx.Length; int bb = new intle; string txt = new stringle; for (int i
5、 = 0; i le; i+) txti = txi.ToString(); /获得明文 string txt2 = new stringle; for (int j = 0; j j+) for (int m = 0; m 26; m+) if (txtj = aam) bbj = (m + a) % 26; txt2j = aa2bbj; /获得密文 string tx2 = for (int n = 0; n n+) tx2 += txt2n; textBox3.Text = tx2; #endregion catch MessageBox.Show(请输入正确格式的秘钥以及明文); p
6、rivate void button2_Click(object sender, EventArgs e) textBox6.Clear(); int a = Convert.ToInt16(textBox4.Text); string tx = textBox5.Text; if (txtj = aa2m) int n = m - a; if (n = 0) n = n + 26; txt2j = aan % 26; else textBox6.Text = tx2;请输入正确的秘钥以及密文1.2.2运行界面2置换密码2.1算法原理在置换密码的情形下,我们也可以认为和是26个英文字母。在移位
7、密码中使用是因为加密和解密都是代数运算。但是在置换密码的情形下,可更简单的将加密和解密过程直接看作是一个字母表上的置换。任取一置换,便可得到一加密函数,见下表(小写字母表示明文,大写字母表示密文):abcdefghijklmnopqrstuvwxyz按照上表应有,等等。解密函数是相应的逆置换。由下表给出:因此,置换密码的一个密钥刚好对应于26个英文字母的一种置换。所有可能的置换有26!种,这个数值超过,是一个很大的数。因此,采用穷尽密钥搜索的攻击方法,即使使用计算机,也是计算上不可行的。2.2实现过程2.2.1 程序代码 public partial class zhihuan : publi
8、c zhihuan() textBox2.Clear();0 string bb = new string26; bb0= bb1= bb2= bb3= bb4= bb5= bb6= bb7= bb8= bb9= bb10= bb11= bb12= bb13= bb14= bb15= bb16= bb17= bb18= bb19= bb20= bb21= bb22= bb23= bb24= bb25=/设置密码加密表 string tx = textBox1.Text; txtm = txm.ToString(); /明文 i+) if (txti = aaj) txt2i = bbj; /密
9、文 txt2.Length; tx2 += txt2i; this.textBox2.Text = tx2; /还可以使用list private void textBox1_TextChanged(object sender, EventArgs e) private void textBox2_TextChanged(object sender, EventArgs e) bb0 = bb1 = bb2 = bb3 = bb4 = bb5 = bb6 = bb7 = bb8 = bb9 = bb10 = bb11 = bb12 = bb13 = bb14 = bb15 = bb16 = b
10、b17 = bb18 = bb19 = bb20 = bb21 = bb22 = bb23 = bb24 = bb25 = string tx = textBox3.Text; for(int j=0;jle;j+) if(txtj=bbm) txt2j = aam;n+ ) textBox4.Text = tx2;2.2.2运行界面3 维吉尼亚密码3.1算法原理密码体制 设是一个正整数。定义对任意的密钥定义:以上所有的运算都是在上进行。使用前面所述的方法,对应,则每个密钥相当于一个长度为的字母串,称为密钥字。维吉尼亚密码一次加密个明文字母。例 假设,密钥字为CIPHER,其对应于如下的数字串
11、K(2,8,15,7,4,17)。要加密的明文为:thiscryptosystemisnotsecure将明文串转化为对应的数字,每六个为一组,使用密钥字进行模26下的加密运算如下所示:19 7 8 18 2 17 24 15 19 14 18 24 18 192 8 15 7 4 17 2 8 15 7 4 17 2 821 15 23 25 6 8 0 23 8 21 22 15 20 14 12 8 18 13 14 19 18 4 2 20 17 415 7 4 17 2 8 15 7 4 17 2 8 1519 19 12 9 15 22 8 25 8 19 22 25 19则相应的
12、密文应该为:VPXZGIAXIVWPUBTTMJPWIZITWZT解密时,使用相同的密钥字,进行逆运算即可。维吉尼亚密码的密钥空间大小为,所以即使的值很小,使用穷尽密钥搜索方法也需要很长的时间。例如,当时,密钥空间大小超过,这样的密钥量已经超出了使用手算进行穷尽搜索的能力范围(当然使用计算机另当别论)。3.2实现过程3.2.1程序代码 public partial class weijiniya : public weijiniya() private void weijiniya_Load(object sender, EventArgs e) private void button1_Click_1(object sender, EventArgs e) #region 秘钥 string tx = t
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2