轻松实现DES算法查看器

丿Mars丶枫眠

丿Mars丶枫眠

2016-01-29 12:14

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

轻松实现DES算法查看器

作者:小帅

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

下载源代码


  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;      
展开更多 50%)
分享

猜你喜欢

轻松实现DES算法查看器

C语言教程 C语言函数
轻松实现DES算法查看器

利用JAVA实现DES加密算法

编程语言 网络编程
利用JAVA实现DES加密算法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

VB.NET实现超级ptm查看器

vb
VB.NET实现超级ptm查看器

如何关闭事件查看器

电脑入门
如何关闭事件查看器

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何打开“事件查看器”

电脑入门
如何打开“事件查看器”

宽带密码查看器查看adsl宽带密码教程

电脑网络
宽带密码查看器查看adsl宽带密码教程

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

一个小语言的词法分析程序

一个小语言的词法分析程序

C-编译器的设计

C-编译器的设计
下拉加载更多内容 ↓