資源簡介
S盒的C語言加解密實現,環境VC++6.0,內含注釋解析
代碼片段和文件信息
#include?“stdafx.h“
#include?“stdlib.h“
#include?“string.h“
#include?“memory.h“
void?show1()?//主界面
{
printf(“%d“?‘1‘);
printf(“\n\n\n\t\t***************?DES加密解密系統?******************\n\n“);
printf(“\t\t--------------------------------------------------\n“);
//printf(“\t\t--------------------------------------------------\n“);
printf(“\t\t**************************************************\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t\t\t1.加密\t\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t\t\t2.解密\t\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t\t\t3.退出\t\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t--------------------------------------------------\n“);
}
void?show2() //加密界面
{
printf(“\n\n\n\t\t******************?DES加密?**********************\n\n“);
printf(“\t\t--------------------------------------------------\n“);
printf(“\t\t**************************************************\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t請選擇明文和密鑰的輸入方式:\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t\t1.直接輸入\t\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t\t2.從文件讀取\t\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t\t3.退出\t\t\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t--------------------------------------------------\n“);
printf(“\t\t\t選擇:“);
}
void?reader(char?str[30]?char?s[8])??//讀取明文和密鑰
{
FILE?*fp;
fp?=?fopen(str?“r“);
if?(fp?==?NULL)
{
printf(“明文讀取失敗!\n“);
}
else
{
fscanf(fp?“%s“?s);
}
fclose(fp);
}
void?To2Bin(char?p[8]?int?b[64])????//將字節轉換成二進制流
{
int?i?k?=?0;
for?(i?=?0;?i<8;?i++)
{
int?j?=?0x80;???//完全正確,因為在數組中就是從高到低存放的
for?(;?j;?j?>>=?1)
{
if?(j&p[i])
{
b[k++]?=?1;
}
else
{
b[k++]?=?0;
}
}
}
}
int?IP_Table[64]?=????????????//初始置換(IP)
{
57?49?41?33?25?17?9?1
59?51?43?35?27?19?11?3
61?53?45?37?29?21?13?5
63?55?47?39?31?23?15?7
56?48?40?32?24?16?8?0
58?50?42?34?26?18?10?2
60?52?44?36?28?20?12?4
62?54?46?38?30?22?14?6
};
int?E_Table[]?=?{ ???? //擴展變換E(個人認為此E,IP,IP逆表優于ppt上的,從0開始便于取遍數組所有元素)
31?0?1?2?3?4
3?4?5?6?7?8
7?8?9?10?11?12
11?12?13?14?15?16
15?16?17?18?19?20
19?20?21?22?23?24
23?24?25?26?27?28
27?28?29?30?31?0
};
//S盒需要根據需要確定————————————————————————————————————————————???????????????????????????????????
int?S_Box[8][4][16]?=?{ //8個s盒
{
{?14?4?13?1?2?15?11?8?3?10?6?12?5?9?0?7?}
{?0?15?7?4?14?2?13?1?10?6?12?11?9?5?3?8?}
{?4?1?14?8?13?6?2?11?15?12?9?7?3?10?5?0?}
{?15?12?8?2?4?9?1?7?5?11?3?14?10?0?6?13?}
}
{
{?15?1?8?14?6?11?3?4?9?7?2?13?12?0
評論
共有 條評論