• 大小: 5KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: C/C++
  • 标签: DES源代码  

资源简介

用C语言实现DES(数据加密算法)的一个例子,密文和密钥都是8个字符。

资源截图

代码片段和文件信息

/*-------------------------------------------------------
      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

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        202  2012-09-07 11:24  Source\bool.h

     文件       8557  2012-09-07 11:24  Source\main.c

     文件       4458  2011-10-06 14:02  Source\tables.h

     目录          0  2018-04-30 18:48  Source

----------- ---------  ---------- -----  ----

                13217                    4


评论

共有 条评论

相关资源