资源简介
用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
评论
共有 条评论