本文研究的是DES算法实现及应用。选择该课题的意义在于:为了防止信息不被非法访问或窃取,实现达到该目的功能软件。DES算法是对称的加密算法,具有速度快,执行效率高等优点,它是由IBM公司研制的一种加密算法.本设计实现了该算法并且集成了加密演示,文本文件加密两个功能模块.加密演示模块提供了对DES算法的加解密演示功能。文本文件加密模块提供了对文本文件加密并保存密文的功能。整个设计采用C++语言实现,DES类提供了两个接口,一个加密接口和一个解密接口,对其进行了封装,以便在其他场合可以提供加解密功能。整个应用程序设计的各个功能模块的执行依靠事件驱动,根据不同的事件原因及事件类型执行不同的功能模块。本文是针对DES算法实现及其应用所做的工作,主要描述DES算法实现原理和方法,应用场合示例演示,实现方式和方法以及在此过程中运用到的计算机知识。并通过所编写的程序实现了本文的描述。
加密演示模块
该模块的主要功能是提供一个加密演示的效果,在输入框中输入明文点确定按钮将显示密文,确定按钮中能智能的检测用户输入的消息是明文还是密文,如果是明文则加密,如果是密文则解谜,体现DES算法的可逆性.对于刚刚生成的密文,我们把它复制下来粘贴到输入框点解密可恢复出明文.其效果图如图3-2所示
该功能模块实现的代码如下:
void DesStringEncrypt::OnBTNRun()
{
// TODO: Add your control notification handler code here
bool flage;
DWORD time=GetTickCount();
UpdateData(true);
int strLen=m_strInput.GetLength();
if (strLen>0)
{
strLen = ((strLen+7)>>3)<<3;
char *buffer=new char[strLen];
memset(buffer,0,strLen);
if(m_strDesKey1 == m_strDesKey2&&m_strDesKey2.GetLength()!=0)
{
if( m_bRunType==ENCRYPT )
flage=m_des.Encrypt(buffer,m_strInput.GetBuffer(0),strLen,m_strDesKey1.GetBuffer(0));
else
flage=m_des.Decrypt(buffer,m_strInput.GetBuffer(0),strLen,m_strDesKey1.GetBuffer(0));
if( flage )
{
CString strMessage;
strMessage.Format("%s成功! 用时%u秒。",(m_bRunType==ENCRYPT)?"加密":"解密",(GetTickCount()-
time)/1000);
MessageBox(strMessage,"提示",MB_ICONINFORMATION);
}
}
else if (m_strDesKey1.GetLength()==0&&m_strDesKey2.GetLength()==0)
{
//使用默认密码加密解密
CString keyString=KEYSTRING;
if( m_bRunType==ENCRYPT )
flage=m_des.Encrypt(buffer,m_strInput.GetBuffer(0),strLen,keyString.GetBuffer(0));
else
flage=m_des.Decrypt(buffer,m_strInput.GetBuffer(0),strLen,keyString.GetBuffer(0));
if( flage )
{
CString strMessage;
strMessage.Format("%s成功! 用时%u秒。",(m_bRunType==ENCRYPT)?"加密":"解密",(GetTickCount()-
time)/1000);
MessageBox(strMessage,"提示",MB_ICONINFORMATION);
}
}
else if (m_strDesKey1.GetLength()>0)
{
CWindow::ShowMessage("错误:DES密钥不一致! ");
}
m_strOutPut.Format("%s",buffer);
delete []buffer;
}
UpdateData(false);
}