资源简介
S盒的C语言加解密实现,环境VC++6.0,内含注释解析
代码片段和文件信息
#include “stdafx.h“
#include “stdlib.h“
#include “string.h“
#include “memory.h“
void show1() //主界面
{
printf(“%d“ ‘1‘);
printf(“\n\n\n\t\t*************** DES加密解密系统 ******************\n\n“);
printf(“\t\t--------------------------------------------------\n“);
//printf(“\t\t--------------------------------------------------\n“);
printf(“\t\t**************************************************\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t\t\t1.加密\t\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t\t\t2.解密\t\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t\t\t3.退出\t\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t--------------------------------------------------\n“);
}
void show2() //加密界面
{
printf(“\n\n\n\t\t****************** DES加密 **********************\n\n“);
printf(“\t\t--------------------------------------------------\n“);
printf(“\t\t**************************************************\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t请选择明文和密钥的输入方式:\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t\t1.直接输入\t\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t\t2.从文件读取\t\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t**\t\t3.退出\t\t\t\t**\n“);
printf(“\t\t**\t\t\t\t\t\t**\n“);
printf(“\t\t--------------------------------------------------\n“);
printf(“\t\t\t选择:“);
}
void reader(char str[30] char s[8]) //读取明文和密钥
{
FILE *fp;
fp = fopen(str “r“);
if (fp == NULL)
{
printf(“明文读取失败!\n“);
}
else
{
fscanf(fp “%s“ s);
}
fclose(fp);
}
void To2Bin(char p[8] int b[64]) //将字节转换成二进制流
{
int i k = 0;
for (i = 0; i<8; i++)
{
int j = 0x80; //完全正确,因为在数组中就是从高到低存放的
for (; j; j >>= 1)
{
if (j&p[i])
{
b[k++] = 1;
}
else
{
b[k++] = 0;
}
}
}
}
int IP_Table[64] = //初始置换(IP)
{
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7
56 48 40 32 24 16 8 0
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
};
int E_Table[] = { //扩展变换E(个人认为此E,IP,IP逆表优于ppt上的,从0开始便于取遍数组所有元素)
31 0 1 2 3 4
3 4 5 6 7 8
7 8 9 10 11 12
11 12 13 14 15 16
15 16 17 18 19 20
19 20 21 22 23 24
23 24 25 26 27 28
27 28 29 30 31 0
};
//S盒需要根据需要确定————————————————————————————————————————————
int S_Box[8][4][16] = { //8个s盒
{
{ 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7 }
{ 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8 }
{ 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0 }
{ 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13 }
}
{
{ 15 1 8 14 6 11 3 4 9 7 2 13 12 0
相关资源
- C语言实现的文字加密与解密小程序(
- rs编解码.c rs纠错码
- 物流管理系统V4.8
- 纯C语言实现https的post和get不依赖任何
- 红外避障小车程序C语言源码.rar
- C语言的小型通用数据库.rar
- C语言实现宾果消消乐
- 51单片机DIY制作:旋转LED数字显示电子
- C语言基于哈希表实现通讯录
- socket多人聊天程序C语言版(一)
- c语言 根据坐标 截取yuv420p 区域 保存
- 算法精解 的源代码
- 基于C语言的流水灯设计
- c语言图形动画课程设计奔跑的小人
- 电力系统潮流计算C语言程序
- 二叉树的插入C语言
- C语言仿真的aloha算法
- AVR单片机C语言程序设计精粹程序
- 银行家算法源程序包含C语言+C++两种代
- C语言拔高训练含代码
- 数据结构C语言版_迪杰斯特拉算法
- Linux下C语言编写服务端、客户端程序
- linux系统下C语言实现带有图形界面的
- 微机接口课设 Proteus 8086 汽车控制系统
- C语言32个关键字九种控制语句34种运算
- C语言试题库共650题,含答案
- c语言 条形码识别
- 链队列严蔚敏 C语言版 链队列表示与
- C语言程序设计PPT何钦铭.
- C语言 拉丁方阵
评论
共有 条评论