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

📄 des1.cpp

📁 des加密 支持短块加密 文件加密 弱密钥过滤 还附加随机性测试
💻 CPP
字号:
// DES1.cpp : 实现文件
//

#include "stdafx.h"
#include "DES.h"
#include "DES1.h"
void CreateSubKey(bool *Key);
void HexToBit(char *input,bool *output);
void BitToChar(bool *in,char *out,int LengthOfBit);
void BitToHex(bool *input,char *output);
void CharToBit(char *in,bool *out,int LengthOfBit);
void Run(bool *input,bool *output,int FLAG);
// CDES1 对话框


IMPLEMENT_DYNAMIC(CDES1, CDialog)

CDES1::CDES1(CWnd* pParent /*=NULL*/)
	: CDialog(CDES1::IDD, pParent)
	, key(_T(""))
	, input(_T(""))
	, m_out(_T(""))
	, c_out(_T(""))
	{
	m_font.CreatePointFont(150,"宋体");
}

CDES1::~CDES1()
{
}

void CDES1::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT4, key);
DDV_MaxChars(pDX, key, 16);
DDX_Text(pDX, IDC_EDIT3, input);
DDX_Text(pDX, IDC_EDIT1, m_out);
DDX_Text(pDX, IDC_EDIT2, c_out);
	}


BEGIN_MESSAGE_MAP(CDES1, CDialog)
	ON_BN_CLICKED(IDC_BUTTON1, &CDES1::OnBnClickedButton1)
	ON_BN_CLICKED(IDC_BUTTON2, &CDES1::OnBnClickedButton2)
	ON_WM_CTLCOLOR()
END_MESSAGE_MAP()


// CDES1 消息处理程序

void CDES1::OnBnClickedButton1()
	{
	
	char keyHex[17]={0};//十六进制密钥
	char cHex[17]={0};//十六进制密文	
	bool mBit[64];//二进制明文	
	bool cBit[64];//二进制密文	
	bool keyBit[64];//二进制密钥	
	char mChar[9]={0};//明文字符		
	char mTemp[1024]={0};//明文缓冲区	
	char cTemp[1024]={0};//密文缓冲区	
	int mlength,keylength,k;//mlength 明文长度 k不足64bit短块 keylength 密钥长度
	int j;
	bool FLAG=true;//容错性检测

	//获取明文密钥
	GetDlgItemText(IDC_EDIT3,input);
	GetDlgItemText(IDC_EDIT4,key);
	
	memcpy(mTemp,input,1024);
	mlength=input.GetLength();
	keylength=key.GetLength();
	k=mlength%8;


	if (mlength==0)
	{
	FLAG=false;
	AfxMessageBox("明文不能为空");
	SetDlgItemText(IDC_DES1,"    ERROR!!!");
	}
	if (keylength<16)
	{
	FLAG=false;
	AfxMessageBox("密钥长度不足16位,请重新输入");
	SetDlgItemText(IDC_DES1,"    ERROR!!!");
	}

if (FLAG==true)
{

	//生成子密钥
	memcpy(keyHex,key,16);
	HexToBit(keyHex,keyBit);
	CreateSubKey(keyBit);

	if (mlength<8)
			{
			memcpy(mChar,mTemp,8);
			//明文转化为二进制并加密成二进制密文
			CharToBit(mChar,mBit,64);
			//DES加密
			Run(mBit,cBit,1);
			//将二进制密文转化为十六进制密文
			BitToHex(cBit,cHex);
			strcat_s(cTemp,cHex);
			//显示
			SetDlgItemText(IDC_EDIT2,cTemp);
			}


		for(j=0;j<mlength/8;j++)
			{
			memcpy(mChar,mTemp+j*8,8);
			CharToBit(mChar,mBit,64);
			Run(mBit,cBit,1);
			BitToHex(cBit,cHex);
			strcat_s(cTemp,cHex);
			}
		SetDlgItemText(IDC_EDIT2,cTemp);
		
		//状态信息显示
		if(k==0)
				SetDlgItemText(IDC_DES1,"     加密成功!!!");
		else 	SetDlgItemText(IDC_DES1,"您输入的字符串中有短块\n请选择短块加密!!!");
	
	}

}


void CDES1::OnBnClickedButton2()
	{
	
	char keyHex[17]={0};//十六进制密钥
	char cHex[17]={0};//十六进制密文	
	bool mBit[64];//二进制明文	
	bool cBit[64];//二进制密文	
	bool keyBit[64];//二进制密钥	
		
	char mTemp[1024]={0};//明文缓冲区	
	char cTemp[1024]={0};//密文缓冲区	
	int clength,keylength;//clength 密文长度  keylength 密钥长度
	int j;
	bool FLAG=true;//容错性检测
	

	
	//获取密文密钥
	GetDlgItemText(IDC_EDIT2,c_out);
	GetDlgItemText(IDC_EDIT4,key);

	clength=c_out.GetLength();
	keylength=key.GetLength();
	
	
	if ((clength%16!=0)||clength==0)
		{
		FLAG=false;
		AfxMessageBox("密文为空或者长度错误");
		SetDlgItemText(IDC_DES1,"    ERROR!!!");
		}
	if (keylength<16)
		{
		FLAG=false;
		AfxMessageBox("密钥长度不足16位,请重新输入");
		SetDlgItemText(IDC_DES1,"    ERROR!!!");
		}
	
if (FLAG==true)
{
	memcpy(cTemp,c_out,1024);
	memcpy(keyHex,key,16);
	//生成子密钥
	HexToBit(keyHex,keyBit);
	CreateSubKey(keyBit);

	for(j=0;j<clength/16;j++)
		{
		char mChar1[9]={0};//明文字符	
		memcpy(cHex,cTemp+j*16,16);
		//十六进制密文转化为二进制密文并解密成二进制明文
		HexToBit(cHex,cBit);	
		Run(cBit,mBit,0);//DES解密
		//将二进制密文转化为明文
		BitToChar(mBit,mChar1,64);
		strcat_s(mTemp,mChar1);
		}
	SetDlgItemText(IDC_EDIT1,mTemp);
	SetDlgItemText(IDC_DES1,"    解密成功!!!");
	}

}

HBRUSH CDES1::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
	{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

	// TODO:  在此更改 DC 的任何属性
	if (pWnd->GetDlgCtrlID()==IDC_DES1)
		{
		pDC->SelectObject(&m_font);
		pDC->SetTextColor(RGB(0,197,205));
		}
	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
	return hbr;
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -