Skip to content

Commit f8b0d92

Browse files
committed
pesent C#
0 parents  commit f8b0d92

26 files changed

+859
-0
lines changed

Present/.vs/Present/v14/.suo

47.5 KB
Binary file not shown.

Present/Present.suo

16.5 KB
Binary file not shown.

Present/Present/Form1.Designer.cs

Lines changed: 137 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Present/Present/Form1.cs

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.ComponentModel;
4+
using System.Data;
5+
using System.Drawing;
6+
using System.Linq;
7+
using System.Text;
8+
using System.Windows.Forms;
9+
10+
namespace Present
11+
{
12+
public partial class Form1 : Form
13+
{
14+
public Form1()
15+
{
16+
InitializeComponent();
17+
}
18+
19+
//S盒
20+
void Sub_bytes(ref byte[] s)
21+
{
22+
byte[] sbox = new byte[]{
23+
0x0c, 0x05, 0x06, 0x0b,
24+
0x09, 0x00, 0x0a, 0x0d,
25+
0x03, 0x0e, 0x0f, 0x08,
26+
0x04, 0x07, 0x01, 0x02
27+
};
28+
for (int i = 0; i < 16; i++)
29+
{
30+
s[i] = sbox[s[i]];
31+
}
32+
}
33+
//P变换
34+
void Exchange(ref byte[] s)
35+
{
36+
byte[] rPx =new byte[]{
37+
0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,
38+
1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,
39+
2,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62,
40+
3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,63
41+
};
42+
byte row1, col1, row, col, shift, shift1, tmp;
43+
byte[] buf = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
44+
for (int i = 0; i < 64; i++)
45+
{
46+
shift1 = 0x08;
47+
row1 = Convert.ToByte(i / 4);
48+
col1 = Convert.ToByte(i % 4);
49+
shift1 >>= col1;
50+
shift = 0x08;
51+
tmp = rPx[i];
52+
row = Convert.ToByte(tmp / 4);
53+
col = Convert.ToByte(tmp % 4);
54+
shift >>= col;
55+
if ((shift & s[row]) != 0)
56+
{
57+
58+
buf[row1] |= shift1;
59+
}
60+
}
61+
s = new byte[buf.Length];
62+
for (int i = 0; i < s.Length; i++)
63+
{
64+
s[i] = buf[i];
65+
}
66+
}
67+
//加密函数
68+
void UpdataKeys(ref byte[] k, int r)
69+
{
70+
byte[] sbox = new byte[]{
71+
0x0c, 0x05, 0x06, 0x0b,
72+
0x09, 0x00, 0x0a, 0x0d,
73+
0x03, 0x0e, 0x0f, 0x08,
74+
0x04, 0x07, 0x01, 0x02
75+
};
76+
byte[] tmpk1 = new byte[20];
77+
int i;
78+
for (i = 0; i < 20; i++)
79+
{
80+
tmpk1[i] = k[i];
81+
}
82+
83+
k[0] = Convert.ToByte(((tmpk1[15] << 1) | (tmpk1[16] >> 3)) & 0x0f);
84+
k[1] = Convert.ToByte(((tmpk1[16] << 1) | (tmpk1[17] >> 3)) & 0x0f);
85+
k[2] = Convert.ToByte(((tmpk1[17] << 1) | (tmpk1[18] >> 3)) & 0x0f);
86+
k[3] = Convert.ToByte(((tmpk1[18] << 1) | (tmpk1[19] >> 3)) & 0x0f);
87+
k[4] = Convert.ToByte(((tmpk1[19] << 1) | (tmpk1[0] >> 3)) & 0x0f);
88+
k[5] = Convert.ToByte(((tmpk1[0] << 1) | (tmpk1[1] >> 3)) & 0x0f);
89+
k[6] = Convert.ToByte(((tmpk1[1] << 1) | (tmpk1[2] >> 3)) & 0x0f);
90+
k[7] = Convert.ToByte(((tmpk1[2] << 1) | (tmpk1[3] >> 3)) & 0x0f);
91+
k[8] = Convert.ToByte(((tmpk1[3] << 1) | (tmpk1[4] >> 3)) & 0x0f);
92+
k[9] = Convert.ToByte(((tmpk1[4] << 1) | (tmpk1[5] >> 3)) & 0x0f);
93+
k[10] = Convert.ToByte(((tmpk1[5] << 1) | (tmpk1[6] >> 3)) & 0x0f);
94+
k[11] = Convert.ToByte(((tmpk1[6] << 1) | (tmpk1[7] >> 3)) & 0x0f);
95+
k[12] = Convert.ToByte(((tmpk1[7] << 1) | (tmpk1[8] >> 3)) & 0x0f);
96+
k[13] = Convert.ToByte(((tmpk1[8] << 1) | (tmpk1[9] >> 3)) & 0x0f);
97+
k[14] = Convert.ToByte(((tmpk1[9] << 1) | (tmpk1[10] >> 3)) & 0x0f);
98+
k[15] = Convert.ToByte(((tmpk1[10] << 1) | (tmpk1[11] >> 3)) & 0x0f);
99+
k[16] = Convert.ToByte(((tmpk1[11] << 1) | (tmpk1[12] >> 3)) & 0x0f);
100+
k[17] = Convert.ToByte(((tmpk1[12] << 1) | (tmpk1[13] >> 3)) & 0x0f);
101+
k[18] = Convert.ToByte(((tmpk1[13] << 1) | (tmpk1[14] >> 3)) & 0x0f);
102+
k[19] = Convert.ToByte(((tmpk1[14] << 1) | (tmpk1[15] >> 3)) & 0x0f);
103+
104+
k[0] = sbox[k[0]];
105+
106+
r = r << 3;
107+
108+
k[15] = Convert.ToByte((k[15] ^ (r >> 4)) & 0x0f);
109+
k[16] = Convert.ToByte((k[16] ^ (r % 16)) & 0x0f);
110+
111+
}
112+
113+
void AddRoundKeys(ref byte[] p, ref byte[] k)
114+
{
115+
for (int i = 0; i < 16; i++)
116+
{
117+
p[i] ^= k[i];
118+
}
119+
}
120+
void Encrypt(ref byte[] p, ref byte[] k)//p:明文 k:密钥
121+
{
122+
int i;
123+
for (i = 0; i < 31; i++)
124+
{
125+
AddRoundKeys(ref p, ref k);
126+
Sub_bytes(ref p);
127+
Exchange(ref p);
128+
UpdataKeys(ref k, i + 1); //扩展密钥
129+
// printblock(p); puts("");
130+
// printblock(k,20);
131+
// puts("");
132+
}
133+
AddRoundKeys(ref p, ref k);
134+
}
135+
private static byte[] strToHexByte(string hexString)
136+
{
137+
hexString = hexString.Replace(" ", "").Replace("0x", "");
138+
byte[] returnBytes = new byte[hexString.Length];
139+
for (int i = 0; i < returnBytes.Length; i++)
140+
returnBytes[i] = Convert.ToByte(hexString.Substring(i, 1), 16);
141+
return returnBytes;
142+
}
143+
144+
private void btnOK_Click(object sender, EventArgs e)
145+
{
146+
byte[] p = strToHexByte(tbxP.Text.Trim());
147+
//byte[] p = new byte[] {0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
148+
// 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f };
149+
byte[] k = strToHexByte(tbxKey.Text.Trim());
150+
151+
Encrypt(ref p, ref k);
152+
tbxRes.Text = "";
153+
for (int i = 0; i < p.Length; i++)
154+
{
155+
tbxRes.AppendText(p[i].ToString("X"));
156+
}
157+
}
158+
159+
private void label1_Click(object sender, EventArgs e)
160+
{
161+
162+
}
163+
164+
private void tbxP_TextChanged(object sender, EventArgs e)
165+
{
166+
167+
}
168+
169+
private void tbxKey_TextChanged(object sender, EventArgs e)
170+
{
171+
172+
}
173+
174+
private void label2_Click(object sender, EventArgs e)
175+
{
176+
177+
}
178+
179+
private void tbxRes_TextChanged(object sender, EventArgs e)
180+
{
181+
182+
}
183+
184+
private void label3_Click(object sender, EventArgs e)
185+
{
186+
187+
}
188+
}
189+
}

0 commit comments

Comments
 (0)