资源简介

DES 加解密算法的C语言简单实现demo Data Encryption Standard 56位密钥加密64位数据

资源截图

代码片段和文件信息

/*-------------------------------------------------------
      Data Encryption Standard  56位密钥加密64位数据 
  2011.10
--------------------------------------------------------*/
#include 
#include 
#include “bool.h“   // 位处理 
#include “tables.h“

void BitsCopy(bool *DatOutbool *DatInint Len);  // 数组复制 

void ByteToBit(bool *DatOutchar *DatInint Num); // 字节到位 
void BitToByte(char *DatOutbool *DatInint Num); // 位到字节

void BitToHex(char *DatOutbool *DatInint Num);  // 二进制到十六进制 64位 to 4*16字符
void HexToBit(bool *DatOutchar *DatInint Num);  // 十六进制到二进制 

void TablePermute(bool *DatOutbool *DatInconst char *Tableint Num); // 位表置换函数 
void LoopMove(bool *DatInint Lenint Num);     // 循环左移 Len长度 Num移动位数 
void Xor(bool *DatAbool *DatBint Num);         // 异或函数 

void S_Change(bool DatOut[32]bool DatIn[48]);   // S盒变换 
void F_Change(bool DatIn[32]bool DatKi[48]);    // F函数                                  

void SetKey(char KeyIn[8]);                         // 设置密钥
void PlayDes(char MesOut[8]char MesIn[8]);       // 执行DES加密
void KickDes(char MesOut[8]char MesIn[8]);             // 执行DES解密 

 

int main()
{
int i=0; 
char MesHex[16]={0};         // 16个字符数组用于存放 64位16进制的密文
  char MyKey[8]={0};           // 初始密钥 8字节*8
char YourKey[8]={0};         // 输入的解密密钥 8字节*8
char MyMessage[8]={0};       // 初始明文 

/*-----------------------------------------------*/

printf(“Welcome! Please input your Message(64 bit):\n“);
gets(MyMessage);            // 明文
printf(“Please input your Secret Key:\n“);
gets(MyKey);                // 密钥

while(MyKey[i]!=‘\0‘)        // 计算密钥长度
{
i++;
}

while(i!=8)                  // 不是8 提示错误
{
printf(“Please input a correct Secret Key!\n“);
gets(MyKey);
i=0;
while(MyKey[i]!=‘\0‘)    // 再次检测
{
i++;
}
}

SetKey(MyKey);               // 设置密钥 得到子密钥Ki

PlayDes(MesHexMyMessage);   // 执行DES加密

printf(“Your Message is Encrypted!:\n“);  // 信息已加密
for(i=0;i<16;i++)           
{
printf(“%c “MesHex[i]);
}
printf(“\n“);
printf(“\n“);

printf(“Please input your Secret Key to Deciphering:\n“);  // 请输入密钥以解密
gets(YourKey);                                         // 得到密钥
SetKey(YourKey);                                       // 设置密钥

KickDes(MyMessageMesHex);                     // 解密输出到MyMessage

printf(“Deciphering Over !!:\n“);                     // 解密结束
for(i=0;i<8;i++)
{
printf(“%c “MyMessage[i]);
}
printf(“\n“);
system(“pause“);

/*------------------------------------------------*/
}

/*-------------------------------
 把DatIn开始的长度位Len位的二进制
 复制到DatOut后
--------------------------------*/
void BitsCopy(bool *DatOutbool *DatInint Len)     // 数组复制 OK 
{
int i=0;
for(i=0;i {
DatOut[i]=DatIn[i];
}
}

/*-------------------------------
 字节转换成位函数 
 每8次换一个字节 每次向右移一位
 和1与取最后一位 共64位 
--------------------------------*/
void ByteToBit(bool *DatOutch

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-09-10 16:00  DES\
     目录           0  2017-09-10 15:58  DES\Debug\
     文件      192581  2017-09-10 15:59  DES\Debug\DES.exe
     文件      206596  2017-09-10 15:59  DES\Debug\DES.ilk
     文件      185800  2017-09-10 15:58  DES\Debug\DES.pch
     文件      484352  2017-09-10 15:59  DES\Debug\DES.pdb
     文件       17731  2017-09-10 15:59  DES\Debug\main.obj
     文件       33792  2017-09-10 15:59  DES\Debug\vc60.idb
     文件       45056  2017-09-10 15:59  DES\Debug\vc60.pdb
     文件        4248  2011-10-07 22:29  DES\DES.dsp
     文件         514  2011-10-07 21:39  DES\DES.dsw
     文件       50176  2017-09-10 16:00  DES\DES.ncb
     文件       48640  2017-09-10 16:00  DES\DES.opt
     文件        1264  2017-09-10 15:59  DES\DES.plg
     目录           0  2017-09-10 15:59  DES\Source\
     文件         202  2012-09-07 11:24  DES\Source\bool.h
     文件        8557  2017-09-10 15:59  DES\Source\main.c
     文件        4458  2011-10-06 14:02  DES\Source\tables.h

评论

共有 条评论