资源简介
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
- 上一篇:c语言期末大作业
- 下一篇:四川大学历年考研C语言试题及答案
相关资源
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
- 算符优先语法分析器(C语言编写)
- 基于C语言的密码锁程序
评论
共有 条评论