}
private void button1_Click(object sender, EventArgs e) {
textBox3.Clear();
string[] aa = new string[26];
aa[0] = \; aa[1] = \; aa[2] = \; aa[3] = \; aa[4] = \; aa[5] = \; aa[6] = \; aa[7] = \; aa[8] = \; aa[9] = \;
aa[10] = \; aa[11] = \; aa[12] = \; aa[13] = \; aa[14] = \; aa[15] = \; aa[16] = \; aa[17] = \; aa[18] = \; aa[19] = \; aa[20] = \; aa[21] = \; aa[22] = \; aa[23] = \; aa[24] = \; aa[25] = \;
string[] aa2 = new string[26];
aa2[0] = \; aa2[1] = \; aa2[2] = \; aa2[3] = \; aa2[4] = \; aa2[5] = \; aa2[6] = \; aa2[7] = \; aa2[8] = \; aa2[9] = \;
aa2[10] = \; aa2[11] = \; aa2[12] = \; aa2[13] = \; aa2[14] = \; aa2[15] = \; aa2[16] = \; aa2[17] = \; aa2[18] = \; aa2[19] = \; aa2[20] = \; aa2[21] = \; aa2[22] = \; aa2[23] = \; aa2[24] = \; aa2[25] = \; try {
#region
int a = Convert.ToInt16(textBox1.Text);
string tx = textBox2.Text; int le = tx.Length;
int[] bb = new int[le];
string[] txt = new string[le]; for (int i = 0; i < le; i++) {
txt[i] = tx[i].ToString(); }//获得明文
string[] txt2 = new string[le]; for (int j = 0; j < le; j++) {
for (int m = 0; m < 26; m++) {
if (txt[j] == aa[m]) {
bb[j] = (m + a) % 26; txt2[j] = aa2[bb[j]]; } }
}//获得密文
string tx2 = \;
for (int n = 0; n < le; n++) {
tx2 += txt2[n]; }
textBox3.Text = tx2; #endregion } catch {
MessageBox.Show(\请输入正确格式的秘钥以及明文\); } }
5
private void button2_Click(object sender, EventArgs e) {
textBox6.Clear();
string[] aa = new string[26];
aa[0] = \; aa[1] = \; aa[2] = \; aa[3] = \; aa[4] = \; aa[5] = \; aa[6] = \; aa[7] = \; aa[8] = \; aa[9] = \;
aa[10] = \; aa[11] = \; aa[12] = \; aa[13] = \; aa[14] = \; aa[15] = \; aa[16] = \; aa[17] = \; aa[18] = \; aa[19] = \; aa[20] = \; aa[21] = \; aa[22] = \; aa[23] = \; aa[24] = \; aa[25] = \;
string[] aa2 = new string[26];
aa2[0] = \; aa2[1] = \; aa2[2] = \; aa2[3] = \; aa2[4] = \; aa2[5] = \; aa2[6] = \; aa2[7] = \; aa2[8] = \; aa2[9] = \;
aa2[10] = \; aa2[11] = \; aa2[12] = \; aa2[13] = \; aa2[14] = \; aa2[15] = \; aa2[16] = \; aa2[17] = \; aa2[18] = \; aa2[19] = \; aa2[20] = \; aa2[21] = \; aa2[22] = \; aa2[23] = \; aa2[24] = \; aa2[25] = \; try {
int a = Convert.ToInt16(textBox4.Text);
string tx = textBox5.Text; int le = tx.Length;
string[] txt = new string[le]; for (int i = 0; i < le; i++) {
txt[i] = tx[i].ToString(); }//获得密文
string[] txt2 = new string[le]; for (int j = 0; j < le; j++) {
for (int m = 0; m < 26; m++) {
if (txt[j] == aa2[m]) {
int n = m - a; if (n <= 0) {
n = n + 26;
txt2[j] = aa[n % 26]; } else {
txt2[j] = aa[n % 26]; }
} } }
string tx2 = \;
for (int n = 0; n < le; n++) {
tx2 += txt2[n]; }
textBox6.Text = tx2; }
catch {
MessageBox.Show(\请输入正确的秘钥以及密文\); }
6
} } }
1.2.2运行界面
7
2置换密码
2.1算法原理
在置换密码的情形下,我们也可以认为P和C是26个英文字母。在移位密码中使用Z26是因为加密和解密都是代数运算。但是在置换密码的情形下,可更简单的将加密和解密过程直接看作是一个字母表上的置换。
任取一置换?,便可得到一加密函数,见下表(小写字母表示明文,大写字母表示密文): a
b c d e f g h i j k l m X N Y A H P O G Z Q W B T n o p q r s t u v w x y z S F L R C V M U E K J D I 按照上表应有e?(a)?X,e?(b)?N,等等。解密函数是相应的逆置换。由下表给出:
A B C D E F G H I J K L M d l r y v o h E z x w p t
N
O P Q R S T U V W X Y Z b g f j q n m U s k a c i 8
因此,d?(A)?d,d?(B)?l,等等。
置换密码的一个密钥刚好对应于26个英文字母的一种置换。所有可能的置换有26!种,这个数值超过4.0?1026,是一个很大的数。因此,采用穷尽密钥搜索的攻击方法,即使使用计算机,也是计算上不可行的。
2.2实现过程
2.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.FormsClass {
public partial class zhihuan : Form {
public zhihuan() {
InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) {
textBox2.Clear();
string[] aa = new string[26];
aa[0] = \; aa[1] = \; aa[2] = \; aa[3] = \; aa[4] = \; aa[5] = \; aa[6] = \; aa[7] = \; aa[8] = \; aa[9] = \;
aa[10] = \; aa[11] = \; aa[12] = \; aa[13] = \; aa[14] = \; aa[15] = \; aa[16] = \; aa[17] = \; aa[18] = \; aa[19] = \; aa[20] = \; aa[21] = \; aa[22] = \; aa[23] = \; aa[24] = \; aa[25] = \;
string[] bb = new string[26];
bb[0]=\; bb[1]=\; bb[2]=\; bb[3]=\; bb[4]=\; bb[5]=\; bb[6]=\; bb[7]=\; bb[8]=\; bb[9]=\;
bb[10]=\; bb[11]=\; bb[12]=\; bb[13]=\; bb[14]=\; bb[15]=\; bb[16]=\; bb[17]=\; bb[18]=\; bb[19]=\; bb[20]=\; bb[21]=\; bb[22]=\; bb[23]=\; bb[24]=\; bb[25]=\;//设置密码加密表
string tx = textBox1.Text; int le = tx.Length;
string[] txt = new string[le]; for (int m = 0; m < le; m++) {
txt[m] = tx[m].ToString(); } //明文
string[] txt2 = new string[le]; for (int i = 0; i < le;i++) {
for (int j = 0; j < 26; j++) {
9