📄 desf.h
字号:
// DESF.h: interface for the DESF class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_DESF_H__F8BFD6BB_E88D_463A_A990_B04EDF70A77E__INCLUDED_)
#define AFX_DESF_H__F8BFD6BB_E88D_463A_A990_B04EDF70A77E__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define maxlen 6000
#include<iostream.h>
#include"string.h"
#include"malloc.h"
#include"stdio.h"
struct bits{
bool bit[64]; //为什么要设置成bool型
int totalbit;
};
struct chars{
char ch[8];
int totalchar;
};
struct bitarray{
bits bitarr[16];
};
class DESF
{
public:
float bitdiff(char mfile[],char cfile[],float * bitdiff8byte);
//功能:显示读入的文件
//参数:读入文件
//结果:将读入的文件显示在屏幕上
//--------------------------------------------------------------
//--------------------------------------------------------------
dispfile(char fn[]);
//功能:显示读入的文件
//参数:读入文件
//结果:将读入的文件显示在屏幕上
//--------------------------------------------------------------
//--------------------------------------------------------------
desDecode(char mfile[],char key[],char cfile[]);
//功能:解密
//参数:输入的密文,密钥,输出明文
//结果:函数改变第三个参数内容
//--------------------------------------------------------------
//--------------------------------------------------------------
desEncode(char mfile[],char key[],char cfile[]);
//功能:加密
//参数:输入的明文,密钥,输出密文
//结果:函数改变第三个参数内容
//--------------------------------------------------------------
//--------------------------------------------------------------
desCoding(char mfile[],char key[],char cfile[],bool codedir);
//功能:将文件中字符串分成每8字节一组,进行加密(解密)
//参数:输入的明文(密文),密钥,输的密文(明文),加密(解密)控制字
//结果:函数改变第三个参数内容
//--------------------------------------------------------------
//--------------------------------------------------------------
desblock(chars intext8,chars key,bool encode,chars * outtext8);
//功能:DES加密(解密)模块,加密(解密)8位字符串
//参数:明文(密文),密钥,加密(解密)控制字,密文(明文)
//结果:函数改变第四个参数内容
//--------------------------------------------------------------
//--------------------------------------------------------------
exclusiveOR(bits bts1,bits bts2,bits * xorRes);
//功能:将扩展后的右边与密钥相异或
//参数:扩展后的右边48位,密钥48位,异或后存放位置
//结果:函数改变第三个参数内容
//--------------------------------------------------------------
//--------------------------------------------------------------
ftran(bits inbts32,bits keyi,bits * fRes);
//功能:DES中的F函数
//参数:右边32位,key序号(0-15),变换后存放位置
//结果:函数改变第二个参数内容
//--------------------------------------------------------------
//--------------------------------------------------------------
ptran(bits bts32,bits * fout);
//功能:P变换,
//参数:待变换数组,处理后结果存放数组
//结果:函数改变第二个参数内容
//--------------------------------------------------------------
//--------------------------------------------------------------
sboxtran(bits bts48,bits * bts32);
//功能:S-BOX , 数据压缩
//参数:进入S盒的48位bool串,输出S盒的32位bool串
//结果:函数改变第二个参数内容
//--------------------------------------------------------------
//--------------------------------------------------------------
bitToSBoxPos(bits bts48,int boxno,int * row,int * col);
//功能:将进入S盒的48位分成8个6位,算出行列
//参数:进入S盒的48位,第几个S盒,S盒的行,S盒的列
//结果:函数改变第三、四个参数内容
//--------------------------------------------------------------
//--------------------------------------------------------------
etran(bits bts32,bits * bts48);
//功能:将右32位进行扩展位48位
//参数:原32位存放结构体bits的变量中,扩展后结果存放结构体bits的变量的指针
//结果:函数改变第二个参数内容
//--------------------------------------------------------------
//--------------------------------------------------------------
keygen(bits key,bitarray * subkey);
//功能:生成子密钥
//参数:经过PC1变换的56位二进制字符串
//结果:将保存于char SubKeys[16][48]
//--------------------------------------------------------------
//--------------------------------------------------------------
pc2tran(bits Cbts28,bits Dbts28,bits * Kbts48);
//功能:将密钥左右两半合并,并进行pc2变换
//参数:变换前密钥的左半边,变换前密钥的有右半边,pc2变换后存放位置
//结果:函数改变第三个参数内容
//--------------------------------------------------------------
//--------------------------------------------------------------
pc1tran(bits bts64,bits * Cbts28,bits * Dbts28);
//功能:将密钥进行pc1变换,并且分成左右两边
//参数:需要变换的64位密钥,pc1变换后的左半边,pc1变换后的有半边
//结果:函数改变第二、三个参数内容
//--------------------------------------------------------------
//--------------------------------------------------------------
leftshift(bits * bit28,int times);
//功能:密钥每轮移位
//参数:需要移位的28位密钥,所要移的位数
//结果:函数改变第一个参数内容
//--------------------------------------------------------------
//--------------------------------------------------------------
FinalIP(bits Lbts32,bits Rbts32,bits * bts64);
//功能:IP逆变换
//参数:变换前左半边,变换前右半边,变换后字符串,
//结果:函数改变第三个参数的内容
//--------------------------------------------------------------
//--------------------------------------------------------------
InitIP(bits bts64,bits * Lbts32,bits * Rbts32);
//功能:IP变换
//参数:待变换字符串,变换后左半边,变换后右半边
//结果:函数改变第二、三个参数的内容
//--------------------------------------------------------------
//--------------------------------------------------------------
bitmaping(int bitmapno,bits inbts,bits * outbts);
//功能:查表置换1.ip 2.fp 3.e 4.p 5.pc1 6.pc2
//参数:选择哪个置换,需要置换的数组,置换后存放位置
//结果:改变第三个参数内容
//--------------------------------------------------------------
//--------------------------------------------------------------
bitstochar(bits bts,chars * ch);
//功能:二进制串到字符串的变换,
//参数:二进制串,字符串
//结果:改变第二个参数内容
//--------------------------------------------------------------
//--------------------------------------------------------------
chartobits(chars ch,bits * bts);
//功能:字符串到二进制串的变换,
//参数:字符串,二进制串
//结果:改变第二个参数内容
//--------------------------------------------------------------
//--------------------------------------------------------------
DESF();
virtual ~DESF();
};
#endif // !defined(AFX_DESF_H__F8BFD6BB_E88D_463A_A990_B04EDF70A77E__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -