资源简介
这是网络安全中,经常使用也是堪称经典的DES加密算法的实现。这里主要用的是比较基础的C语言来实现的,因为一般关于系统层面的,用C语言开发比较多,故用该语言
代码片段和文件信息
#include
#include
#include
void Des();//the des calculation
void IPset(int type);
void iterate();
void createSubkey(char* CD char* subkey int time);
void right_extend(char*right char* ex_right);
void PC_set(char* CD);
void leftMove(char* CD);
void xor(char*right char*subkey);
void s_box(char*ex_right char*right);
void p_set(char*right);
void print(char* outout int length);
void test(char output[8][8]);
char message[64]; //the message
char key[64]; //the key
char password[64]; //the password at last
char temp[8][8];
int main() {
while(1) {
char temp_key[56];
scanf(“%s“ &message);
scanf(“%s“ &temp_key);
/*make the 64 bits key*/
int num = 0;
for(int i = 0; i < 64; i++) {
if((i+1) % 8 == 0) {
/*the check bit is set to zero*/
key[i] = ‘0‘;
}
else {
key[i] = temp_key[num];
num++;
}
}
printf(“before the des\n“);
printf(“message is :\n“);
print(message 64);
Des();
printf(“\nafter the des\n“);
printf(“password is:\n“);
print(password 64);
break;
}
}
/*the begining of the des calculation*/
void Des() {
for(int i = 0; i < 8; i++) {
for(int j = 0; j < 8; j++) {
temp[i][j] = message[i*8+j];
}
}
IPset(1);
iterate();
IPset(0);
for(int i = 0; i < 8; i++) {
for(int j = 0; j < 8; j++) {
password[i*8+j] = temp[i][j];
}
}
}
/*the IP set depend on the parameter
if 0 IPset
else IPreset*/
void IPset(int type) {
char temp1[8][8];
for(int i = 0; i < 8; i++) {
for (int j = 0; j < 8; ++j)
{
temp1[i][j] = temp[i][j];
}
}
temp[0][0] = type? temp1[7][1]:temp1[4][7];
temp[0][1] = type? temp1[6][1]:temp1[0][7];
temp[0][2] = type? temp1[5][1]:temp1[5][7];
temp[0][3] = type? temp1[4][1]:temp1[1][7];
temp[0][4] = type? temp1[3][1]:temp1[6][7];
temp[0][5] = type? temp1[2][1]:temp1[2][7];
temp[0][6] = type? temp1[1][1]:temp1[7][7];
temp[0][7] = type? temp1[0][1]:temp1[3][7];
temp[1][0] = type? temp1[7][3]:temp1[4][6];
temp[1][1] = type? temp1[6][3]:temp1[0][6];
temp[1][2] = type? temp1[5][3]:temp1[5][6];
temp[1][3] = type? temp1[4][3]:temp1[1][6];
temp[1][4] = type? temp1[3][3]:temp1[6][6];
temp[1][5] = type? temp1[2][3]:temp1[2][6];
temp[1][6] = type? temp1[1][3]:temp1[7][6];
temp[1][7] = type? temp1[0][3]:temp1[3][6];
temp[2][0] = type? temp1[7][5]:temp1[4][5];
temp[2][1] = type? temp1[6][5]:temp1[0][5];
temp[2][2] = type? temp1[5][5]:temp1[5][5];
temp[2][3] = type? temp1[4][5]:temp1[1][5];
temp[2][4] = type? temp1[3][5]:temp1[6][5];
temp[2][5] = type? temp1[2][5]:temp1[2][5];
temp[2][6] = type? temp1[1][5]:temp1[7][5];
temp[2][7] = type? temp1[0][5]:temp1[3][5];
temp[3][0] = type? temp1[7][7]:temp1[4][4];
temp[3][1] = type? temp1[6][7]:temp1[0][4];
temp[3][2] = type? temp1[5][7]:temp1[5][4];
temp[3][3] = type? temp1[4][7]:temp1[1][4];
temp[3][4] = type? temp1[3][7]:te
- 上一篇:链表实现集合的交叉并运算c++.cpp
- 下一篇:MD5算法c++程序设计实现
评论
共有 条评论