轻松实现DES算法查看器

2016-01-29 12:14 3 1 收藏

轻松实现DES算法查看器,轻松实现DES算法查看器

【 tulaoshi.com - C语言心得技巧 】

轻松实现DES算法查看器

作者:小帅

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com)

下载源代码


  DES(Data Encrypton Standard) 算法的实现网上已经有很多,本人在此讲述的是在DES算法加密过程中如何查看16迭代过程中生成的Ki,Li,Ri,Fi,Si等,这样可以当做一个DES加密对照器,这样可以方便的发现你在加密过程中出现的错误!



图一:程序运行界面

  本程序用了一个列表框来显示所有16次迭代的所有信息,并在选择一栏后,在下面的编辑框中显示详细信息,这样就可以不必在列表框中拖曳鼠标,这样方便拷贝!

程序介绍:
采取的编程语言是微软的VC6.0,大小为184K!实现了简易的DES加密查看功能!功能介绍:
1:编辑框1:输入明文,只允许8位的ASCII码,不允许输入中文;
2:编辑框2:输入密钥,只允许8位的ASCII码,不允许输入中文;
3.加密按钮:对明文加密,并在下面显示加密后的二进制和ASCII码;
4.对每次加密解密显示 Ki, Li, Ri, Fi, Si的值;
5.对列表框的点击将会详细显示如下信息:
Ki:加密过程中产生的子密钥,共16个,每个48位
Li:加密过程中产生的子密钥,共16个,每个32位
Ri:加密过程中产生的子密钥,共16个,每个32位
Fi:加密过程中产生的子密钥,共16个,每个32位
Si:加密过程中产生的S值,共8个,每个大小为0~15
下面就由本人详细介绍在实现加密过程中需要注意的一些问题:

  在程序一开始的时候,我们需要在OnInitDialog这个函数内做一些初始化操作,对列表框的操作如下,让其显示条形,并插入要显示的项目:

////////////////////////////////////////////////////////////////////////CenterWindow(GetDesktopWindow());::SendMessage(m_listdata.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES,LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);m_listdata.InsertColumn(0,"NO.",LVCFMT_LEFT,30);m_listdata.InsertColumn(1,"L0",LVCFMT_LEFT,40);m_listdata.InsertColumn(2,"R0",LVCFMT_LEFT,40);m_listdata.InsertColumn(3,"F函数值",LVCFMT_LEFT,60);m_listdata.InsertColumn(4,"密钥Ki",LVCFMT_LEFT,50);m_listdata.InsertColumn(5,"S盒",LVCFMT_LEFT,45);////////////////////////////////////////////////////////////////////////
  加密的过程中,需要对明文和密文检测,是否含有无法加密的字符,如中文字符,或者是否满足8位这个条件(本人并未对数据做未满8位以0补的处理):
//////////////////////////////////////////////////////////////////////////// 对输入的数据进行验证if(m_old.GetLength()!=8){MessageBox("请输入8位明文", "友情提示");return;}if(m_key.GetLength()!=8){MessageBox("请输入8位密文", "友情提示");return;}
对明文处理,将对应的ASCII码转化为二进制,并对中文字符的判断:
///////////////////////////////////////////////////////////////////////////// 此处对明文处理,将对应的ASCII码转化为二进制int flag=true;for(int i=0; i<8; i++){char ch=m_old.GetAt(i);if(ch&0x80&&flag){MessageBox("含有中文字符,加密错误不负责任!", "友情提示");flag=false;//return;}memset(tmp, 0, 8);for(int j=0; j<8; j++){tmp[j]=(ch%2+2)%2;ch/=2;}for(j=7; j>=0; j--){old[i*8+7-j]=tmp[j];}}
为了实现加密解密迭代算法的共享,本人做了如下处理:
/// 此处开始16迭代算法isDecrypt=false;for(i=1; i<=16; i++){CDESDlg::Iterate(i);}
在16次迭代算法中,大部分操作是重复的,所以采取了上述的做法!在这里,本人把迭代算法的代码全部写在这里:
void CDESDlg::Iterate(int numOfIteration){///////////////////////////////////////////////////////////////////////////// 此处迭代生成子密钥kiint j=2;// 移位次数if(numOfIteration==1||numOfIteration==2||numOfIteration==9||numOfIteration==16){j=1;}////////////////////////////////////////////////////////////////////////////如果为解密,迭代移位的次序变换相反方向if(isDecrypt){if(numOfIteration==16){j=0;}else if(numOfIteration==15||numOfIteration==8||numOfIteration==1){j=-1;}else{j=-2;}}// 省略此部分代码.......// 生成子密钥Ki,存储到数组k1[48]中去//////////////////////////////////////////////////////////////////////////// 将Ri-1扩充成48位并与Ki相加并模2memset(re, 0, 48);for(i=0; i<48; i++){re[i]=(R0[E_Table[i]-1]+k1[i])%2;
                        

来源:https://www.tulaoshi.com/n/20160129/1485205.html

延伸阅读
DES算法及其在VC++6.0下的实现(上) 作者:航天医学工程研究所四室 朱彦军 下载本文示例源代码 摘要: 本文介绍了一种国际上通用的加密算法—DES算法的原理,并给出了在VC++6.0语言环境下实现的源代码。最后给出一个示例,以供参考。 关键字:DES算法、明文、密文、密钥、VC; ...
标签: windows10
win10事件查看器如何使用   事件查看器打开方法: 1、直接在Win10任务栏的搜索框种,搜索事件查看器,就可以快速找到了。 2、然后点击最顶部的时间查看器就可以进入了。 Win10事件查看器使用方法: 1、打开事件查看器后,使用方法非常简单,我们可以依次展开功能,比如需要查看系统日志,可以依次展开...
标签: 电脑入门
在Win8之前,照片查看器以动态链接库的形式存在,依附于explorer.exe进程中。Win8之后变为独立应用,但仍是以动态链接库形式存在。而在Win10系统中,照片查看器的系统进程又是什么呢? 查看方法 第一步、 打开一个照片查看器程序,再打开Win10任务管理器,对着照片查看器单击鼠标右键,菜单中选择属性。 第二步、 在随后出现的dllhos...
TM聊天记录查看器如何使用   TM聊天记录查看器(提示:注册1套,可以在3台电脑上使用)本软件可以不用密码查看TM聊天记录。 使用方法,直接运行,然后选者要读取的TM号码,然后点击要查看号码就可以查看聊天记录了。本软件可以看到安装本软件以前的聊天记录。 注意:本软件必须安装到目标号码使用的电脑才有效,因为软件只能...
标签: windows10
win10事件查看器怎么打开   对于一些电脑技术人员来说,Windows事件查看器是必须熟悉的,因为它对解决一些系统疑难问题,会起到很好的辅助帮助。在XP、Win7、Win8和最新的Win10系统中,都集成了事件查看器,通过它可以完成许多特殊的工作,比如审核系统事件和存放系统、安全及应用程序日志等等。通过查看这些信息中记录的警告或错误提...

经验教程

192

收藏

8
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部