好了,廢話不多說了,見**吧~(ps.命名不是很規範,大家將就下)
#include/*各種函式定義*/
int move_num(int r);
void xor(int *r_b, int *k3, int large);
void s_box(int r_t[32], int r_b[48]);
void erzhuanshiliu(int *k, char *key, int large);
void shizhuaner(int *k, int n, int i, int large);
void round(int r, int k2[56], int k3[48], int r_s[32], int r_b[48], int l[32], int k_c_two[48], int m_c_two[32], int e[48], char c_r[8], char c_l[8]);
void exchange(int *k1, int *k2, int *rule, int n);
void key_move(int k2[56], int n);
/*十進位制轉換成二進位制*/
void shizhuaner(int *k, int n, int i,int large)
/* k是存放二進位制的陣列,n是需要進行轉換的十進位制數,i是第i個十進位制數,large是陣列大小*/
while (n != 0);
while (j >= 0)
return ;
}/*二進位制轉換成十六進製制*/
void erzhuanshiliu(int *k,char *key, int large)
/* k是二進位制陣列,key是存放十六進製制的陣列,large是k陣列的大小*/
} else
}return;
}/*迴圈函式*/
void round(int r, int k2[56], int k3[48], int r_s[32], int r_b[48], int l[32], int k_c_two[48], int m_c_two[32], int e[48], char c_r[8], char c_l[8])
/* r是輪數*/
/* k2是金鑰經過置換1置換完的陣列,k3是金鑰經過置換2置換完的陣列*/
/* r_s是明文處理中r的32大小時的陣列,r_b是明文處理中r的48大小時的陣列,l是明文處理中l的陣列*/
/* k_c_two是金鑰處理中置換2的置換規則陣列,m_c_two是明文處理中置換2的置換規則陣列,e是明文處理中e盒的置換規則陣列*/
/* c_r是各輪密文的r部分,c_l是各輪密文的l部分*/
/* 異或函式 */
void xor(int *r_b, int *k3,int large)
}/* s盒運算函式 */
void s_box(int r_t[32],int r_b[48])
, ,,},
s2[4][16] = ,,,
},s3[4][16] = ,,,
},s4[4][16] = ,,,
},s5[4][16] = ,,,
},s6[4][16] = ,,,
},s7[4][16] = ,,,
},s8[4][16] = ,,,
};for (i = 0; i < 8; i++)
shizhuaner(r_t, jie, i,32); //s盒為十六進製制,須轉換回二進位制進行存放 }}
/*左移函式*/
void key_move(int k2[56], int n)
if (n == 1) //左移1位時,特殊端點值(第27、55)賦值
else //左移2位時,特殊端點值(第27、28、54、55)賦值 }
/* 獲取第r輪左移位數 */
int move_num(int r)
return i; //返回移動的位數
}/* 置換函式 */
void exchange(int *k1, int *k2, int *rule,int n)
return;
}/*主函式*/
int main()
, k_c_two[48] = ,
m_c_one[64] = ,
e[48] = ,
m_c_two[32] = ,
m_c_three[64] = ;
printf("**des加密**\n");
printf("\n");
printf("請輸入加密的金鑰:\n");
for (i = 0; i < 8; i++) //從鍵盤裡獲取輸入的金鑰
g = getchar(); //緩衝掉多於8個字元以外字元和回車符
while (g != '\n')
printf("請輸入需要加密的明文:\n");
for (i = 0; i < 8; i++) //從鍵盤裡獲取輸入的明文
g = getchar(); //緩衝掉多於8個字元以外字元和回車符
while (g != '\n')
printf("\n");
exchange(k1, k2, k_c_one, 56); //金鑰進行置換1處理
exchange(m1, m2, m_c_one, 64); //明文進行金鑰1處理
for (i = 0; i < 32; i++)
l[i] = m2[i]; //明文的l部分
j = 0;
for (i = 32; i < 64; i++)
for (r = 1; r <= 16; r++) //進行16輪的迴圈處理
round(r,k2, k3, r_s, r_b, l, k_c_two, m_c_two, e, c_r, c_l);
for (i = 0; i < 64; i++) //將密文r的部分與密文l的部分合一起
exchange(m1, m2, m_c_three, 64); //進行明文處理的置換3
erzhuanshiliu(m2, c, 64); //二進位制轉換成十六進製制,得到最終密文
printf("這是最終密文:\n");
for (i = 0; i < 16; i++)
printf("%c ", c[i]);
printf("\n");
return 0;
}
以下是測試**和運**況的截圖:
這是我第一次寫部落格(好緊張好刺激啊~~),請各位大大多多指教撒~~
C 實現DES加密
1.定義金鑰變數key 2.定義子金鑰儲存變數subkey 3.將pc 1,pc 2,ip,ip 1,e盒和s盒,p,加密輪資料新建陣列變數儲存 4.定義chartobitset方法進行字串到二進位制數的轉換 5.定義exec函式對資料進行進行擴充套件置換,異或,查s盒置換,p置換的初始操作 6.定...
java web class 加密實現
最近公司讓我研究這方面,所以我自己參考文獻和其他人一些做法,再經過自己的研究,實現了web class加密。我的加密方案其中難點有兩個 rsa 私匙 的隱藏,class檔案的加密儲存方案 經過研究和努力我已經基本上解決了這兩個點。rsa 私匙 的隱藏 採用函式介面,專門生成乙個jar來提供這個私匙和...
C 實現DES對稱加密法
入口引數有三個 key data mode。key為加密解密使用的金鑰,data為加密解密的資料,mode為其工作模式。當模式為加密模式時,明文按照64位進行分組,形成明文組,key用於對資料加密,當模式為解密模式時,key用於對資料解密。實際運用中,金鑰只用到了64位中的56位,這樣才具有高的安全...