温馨提示:代码在线浏览功能只能做为源码浏览参考,如果想更进一步了解该代码请下载:网博直销系统软件源码
当前文件:
WangBoDirect/App_Code/des.cs,打开代码结构图
WangBoDirect/App_Code/des.cs,打开代码结构图1Using directives 8
9
namespace Func //函数库 10
{ 11
public class Func 12
{ 13
14
//IP置换欢迎各位测试,并提出宝贵意见 15
// 此软件的后继版本正紧张开发中,网博承诺此软件完全开放代源码,并供大家免费使用 16
// 您可以在以下QQ群中得到免费的技术支持与学习机会 17
// 群:3920122(网博资讯2)3742047(网博资讯3)8261396(网博资讯4)9884297(网博资讯5) 18
// ------------------------------------------------------------------------------------------------- 19
20
//业务联系: 21
22
//QQ咨询405098219 100108980 23
//联系电话:0898- 69208466 69206466 13518884166 13518800346 24
//E-mail:webhww@126.com 25
public int[] IP(char[] mchar) 26
{ 27
int[] mint = new int[64]; 28
int[] mreturn = new int[64]; 29
for (int i = 0; i < mint.Length; i++) 30
{ 31
mint[i] = 0; 32
} 33
34
//将char明文转化为2进制明文 35
for (int i = 0; i < mchar.Length; i++) 36
{ 37
if ((mchar[i] & 0x80) != 0) mint[i * 8 + 0] = 1; 38
if ((mchar[i] & 0x40) != 0) mint[i * 8 + 1] = 1; 39
if ((mchar[i] & 0x20) != 0) mint[i * 8 + 2] = 1; 40
if ((mchar[i] & 0x10) != 0) mint[i * 8 + 3] = 1; 41
if ((mchar[i] & 0x8) != 0) mint[i * 8 + 4] = 1; 42
if ((mchar[i] & 0x4) != 0) mint[i * 8 + 5] = 1; 43
if ((mchar[i] & 0x2) != 0) mint[i * 8 + 6] = 1; 44
if ((mchar[i] & 0x1) != 0) mint[i * 8 + 7] = 1; 45
} 46
47
//置换表 48
mreturn[0] = mint[57]; mreturn[1] = mint[49]; mreturn[2] = mint[41]; 49
mreturn[3] = mint[33]; mreturn[4] = mint[25]; mreturn[5] = mint[17]; 50
mreturn[6] = mint[9]; mreturn[7] = mint[1]; mreturn[8] = mint[59]; 51
mreturn[9] = mint[51]; mreturn[10] = mint[43]; mreturn[11] = mint[35]; 52
mreturn[12] = mint[27]; mreturn[13] = mint[19]; mreturn[14] = mint[11]; 53
mreturn[15] = mint[3]; mreturn[16] = mint[61]; mreturn[17] = mint[53]; 54
mreturn[18] = mint[45]; mreturn[19] = mint[37]; mreturn[20] = mint[29]; 55
mreturn[21] = mint[21]; mreturn[22] = mint[13]; mreturn[23] = mint[5]; 56
mreturn[24] = mint[63]; mreturn[25] = mint[55]; mreturn[26] = mint[47]; 57
mreturn[27] = mint[39]; mreturn[28] = mint[31]; mreturn[29] = mint[23]; 58
mreturn[30] = mint[15]; mreturn[31] = mint[7]; mreturn[32] = mint[56]; 59
mreturn[33] = mint[48]; mreturn[34] = mint[40]; mreturn[35] = mint[32]; 60
mreturn[36] = mint[24]; mreturn[37] = mint[16]; mreturn[38] = mint[8]; 61
mreturn[39] = mint[0]; mreturn[40] = mint[58]; mreturn[41] = mint[50]; 62
mreturn[42] = mint[42]; mreturn[43] = mint[34]; mreturn[44] = mint[26]; 63
mreturn[45] = mint[18]; mreturn[46] = mint[10]; mreturn[47] = mint[2]; 64
mreturn[48] = mint[60]; mreturn[49] = mint[52]; mreturn[50] = mint[44]; 65
mreturn[51] = mint[36]; mreturn[52] = mint[28]; mreturn[53] = mint[20]; 66
mreturn[54] = mint[12]; mreturn[55] = mint[4]; mreturn[56] = mint[62]; 67
mreturn[57] = mint[54]; mreturn[58] = mint[46]; mreturn[59] = mint[38]; 68
mreturn[60] = mint[30]; mreturn[61] = mint[22]; mreturn[62] = mint[14]; 69
mreturn[63] = mint[6]; 70
return mreturn; 71
} 72
//IP-1置换 73
public int[] IP_1(int[] mchar) 74
{ 75
//置换表 76
int[] IPreturn = new int[64]; 77
IPreturn[0] = mchar[39]; 78
IPreturn[1] = mchar[7]; 79
IPreturn[2] = mchar[47]; 80
IPreturn[3] = mchar[15]; 81
IPreturn[4] = mchar[55]; 82
IPreturn[5] = mchar[23]; 83
IPreturn[6] = mchar[63]; 84
IPreturn[7] = mchar[31]; 85
IPreturn[8] = mchar[38]; 86
IPreturn[9] = mchar[6]; 87
IPreturn[10] = mchar[46]; 88
IPreturn[11] = mchar[14]; 89
IPreturn[12] = mchar[54]; 90
IPreturn[13] = mchar[22]; 91
IPreturn[14] = mchar[62]; 92
IPreturn[15] = mchar[30]; 93
IPreturn[16] = mchar[37]; 94
IPreturn[17] = mchar[5]; 95
IPreturn[18] = mchar[45]; 96
IPreturn[19] = mchar[13]; 97
IPreturn[20] = mchar[53]; 98
IPreturn[21] = mchar[21]; 99
IPreturn[22] = mchar[61]; 100
IPreturn[23] = mchar[29]; 101
IPreturn[24] = mchar[36]; 102
IPreturn[25] = mchar[4]; 103
IPreturn[26] = mchar[44]; 104
IPreturn[27] = mchar[12]; 105
IPreturn[28] = mchar[52]; 106
IPreturn[29] = mchar[20]; 107
IPreturn[30] = mchar[60]; 108
IPreturn[31] = mchar[28]; 109
IPreturn[32] = mchar[35]; 110
IPreturn[33] = mchar[3]; 111
IPreturn[34] = mchar[43]; 112
IPreturn[35] = mchar[11]; 113
IPreturn[36] = mchar[51]; 114
IPreturn[37] = mchar[19]; 115
IPreturn[38] = mchar[59]; 116
IPreturn[39] = mchar[27]; 117
IPreturn[40] = mchar[34]; 118
IPreturn[41] = mchar[2]; 119
IPreturn[42] = mchar[42]; 120
IPreturn[43] = mchar[10]; 121
IPreturn[44] = mchar[50]; 122
IPreturn[45] = mchar[18]; 123
IPreturn[46] = mchar[58]; 124
IPreturn[47] = mchar[26]; 125
IPreturn[48] = mchar[33]; 126
IPreturn[49] = mchar[1]; 127
IPreturn[50] = mchar[41]; 128
IPreturn[51] = mchar[9]; 129
IPreturn[52] = mchar[49]; 130
IPreturn[53] = mchar[17]; 131
IPreturn[54] = mchar[57]; 132
IPreturn[55] = mchar[25]; 133
IPreturn[56] = mchar[32]; 134
IPreturn[57] = mchar[0]; 135
IPreturn[58] = mchar[40]; 136
IPreturn[59] = mchar[8]; 137
IPreturn[60] = mchar[48]; 138
IPreturn[61] = mchar[16]; 139
IPreturn[62] = mchar[56]; 140
IPreturn[63] = mchar[24]; 141
return IPreturn; 142
} 143
//由64位原始密钥计算16个48位密钥 144
public int[][] makekey(char[] kchar) 145
{ 146
//16位数组存放16个输出密钥 147
int[][] keyreturn = new int[16][]; 148
int[] temp = new int[64]; 149
int[] kint = new int[56]; 150
int[] c0 = new int[28]; int[] d0 = new int[28]; 151
int[] c16 = new int[28]; int[] d1 = new int[28]; 152
int[] c1 = new int[28]; int[] d2 = new int[28]; 153
int[] c2 = new int[28]; int[] d3 = new int[28]; 154
int[] c3 = new int[28]; int[] d4 = new int[28]; 155
int[] c4 = new int[28]; int[] d5 = new int[28]; 156
int[] c5 = new int[28]; int[] d6 = new int[28]; 157
int[] c6 = new int[28]; int[] d7 = new int[28]; 158
int[] c7 = new int[28]; int[] d8 = new int[28]; 159
int[] c8 = new int[28]; int[] d9 = new int[28]; 160
int[] c9 = new int[28]; int[] d10 = new int[28]; 161
int[] c10 = new int[28]; int[] d11 = new int[28]; 162
int[] c11 = new int[28]; int[] d12 = new int[28]; 163
int[] c12 = new int[28]; int[] d13 = new int[28]; 164
int[] c13 = new int[28]; int[] d14 = new int[28]; 165
int[] c14 = new int[28]; int[] d15 = new int[28]; 166
int[] c15 = new int[28]; int[] d16 = new int[28]; 167
int[] k1 = new int[48]; int[] k2 = new int[48]; int[] k3 = new int[48]; 168
int[] k4 = new int[48]; int[] k5 = new int[48]; int[] k6 = new int[48]; 169
int[] k7 = new int[48]; int[] k8 = new int[48]; int[] k9 = new int[48]; 170
int[] k10 = new int[48]; int[] k11 = new int[48]; int[] k12 = new int[48]; 171
int[] k13 = new int[48]; int[] k14 = new int[48]; int[] k15 = new int[48]; 172
int[] k16 = new int[48]; 173
174
//获得原始密钥2进制形式 175
for (int i = 0; i < kchar.Length; i++) 176
{ 177
if ((kchar[i] & 0x80) != 0) temp[i * 8 + 0] = 1; 178
if ((kchar[i] & 0x40) != 0) temp[i * 8 + 1] = 1; 179
if ((kchar[i] & 0x20) != 0) temp[i * 8 + 2] = 1; 180
if ((kchar[i] & 0x10) != 0) temp[i * 8 + 3] = 1; 181
if ((kchar[i] & 0x8) != 0) temp[i * 8 + 4] = 1; 182
if ((kchar[i] & 0x4) != 0) temp[i * 8 + 5] = 1; 183
if ((kchar[i] & 0x2) != 0) temp[i * 8 + 6] = 1; 184
if ((kchar[i] & 0x1) != 0) temp[i * 8 + 7] = 1; 185
} 186
187
//去掉7。。15。。。。。63的奇校检位并打乱 188
kint[0] = temp[56]; 189
kint[1] = temp[48]; 190
kint[2] = temp[40]; 191
kint[3] = temp[32]; 192
kint[4] = temp[24]; 193
kint[5] = temp[16]; 194
kint[6] = temp[8]; 195
kint[7] = temp[0]; 196
kint[8] = temp[57]; 197
kint[9] = temp[49]; 198
kint[10] = temp[41]; 199
kint[11] = temp[33]; 200
kint[12] = temp[25]; 201
kint[13] = temp[17]; 202
kint[14] = temp[9]; 203
kint[15] = temp[1]; 204
kint[16] = temp[58]; 205
kint[17] = temp[50]; 206
kint[18] = temp[42]; 207
kint[19] = temp[34]; 208
kint[20] = temp[26]; 209
kint[21] = temp[18]; 210
kint[22] = temp[10]; 211
kint[23] = temp[2]; 212
kint[24] = temp[59]; 213
kint[25] = temp[51]; 214
kint[26] = temp[43]; 215
kint[27] = temp[35]; 216
kint[28] = temp[62]; 217
kint[29] = temp[54]; 218





}