资源简介
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语言期末大作业
- c语言之汉诺塔无限关卡游戏文件密码
- 《C语言库函数速查手册》
- 实序列FFT算法的C语言实现
- C语言酒店管理系统 C语言大作业
- 基于STM32F4的加速度频域二次积分振动
- 基于蚁群算法的TSP问题实现C语言
- C语言-投票与管理系统
- 《嵌入式Linux上的C语言编程实践》
- 循环码编译码通用版
- C语言实现简单的数据库管理系统
- 学生信息管理系统(数组版)
- C语言 心形.txt
- C语言实现简单的web服务器
- c语言的拓扑排序的课程设计
- c语言 文本编辑器
- 新概念51单片机C语言教程入门、提高
- (严蔚敏)数据结构视频教程C语言版
- vigenere加密解密C语言代码
- C语言经典小程序和C语言编写的小游戏
- 实用算法实验_双向链表
- 实用算法实验_链表
- 实用算法实验_顺序表的应用
- 小波变换C语言实现代码
- C语言代码ATM管理系统
- 数据结构c语言版期末考试复习题库
- 用c语言编写ATM取款机模拟系统
- 信息安全原理大数四则运算及DH算法
- 单片机接收数据帧帧头帧尾校验数据
评论
共有 条评论