⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 desf.h

📁 卢开澄,《计算机密码学-计算机网络中的数据保密与安全》第三版中的DES程序。在网上搜索过
💻 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 + -