密码学实验三—DES算法的实现

密码学实验三—DES算法的实现

ID:46893980

大小:208.00 KB

页数:20页

时间:2019-11-29

密码学实验三—DES算法的实现_第1页
密码学实验三—DES算法的实现_第2页
密码学实验三—DES算法的实现_第3页
密码学实验三—DES算法的实现_第4页
密码学实验三—DES算法的实现_第5页
资源描述:

《密码学实验三—DES算法的实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验三用DES实现对数据的加解密一、实验目的1.用DES加密方法实现对明文的加密2.用DES解密加密后的密文二、实验内容1、给定八字节明文,输入8位密钥对明文加密2、用同一个密钥对加密的密文解密的到原来的明文三、实验原理实验步骤(包括流程图、功能模块)【实验原理】1、DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则见下表:58,50,12,34,26,18,10,2,60,52,44,36,28,20,12,4,  62,54,46,38,30

2、,22,14,6,64,56,48,40,32,24,16,8,  57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,  61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,2.将输入的第58位换到第一位,第50位换到第2位,...,依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,例:设置换前的输入值为D1D2D3......D64,则经过初始置换后的结果为:L0=D550...D8;R0=D57D49...D7。  经过26次迭代运算后

3、。得到L16、R16,将此作为输入,进行逆置换,即得到密文输出。逆置换正好是初始置的逆运算,例如,第1位经过初始置换后,处于第40位,而通过逆置换,又将第40位换回到第1位,其逆置换规则如下表所示:  40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,  38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,  36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,  34,2,42,10,50,18,5826,33,1,41,9,49,17,57,25,3

4、.DES算法的解密过程是一样的,区别仅仅在於第一次迭代时用子密钥K15,第二次K14、......,最后一次用K0,算法本身并没有变化。【算法流程图】【功能模块】1.输入明文:voidDES::SetMsg(char*_msg,int_length){if(_length>8){return;}for(inti=0;i<_length;i++){msg[i]=_msg[i];}//转换成二进制Char2Bit(msg,bmsg,8);};1.输入密钥:voidDES::SetKey(char*_key,int_length){if(_length>8){return;}fo

5、r(inti=0;i<_length;i++){key[i]=_key[i];}//转成二进制Char2Bit(key,bkey,8);};2.各种置换:voidDES::InitSwap(boolin[64]){//打乱for(inti=0;i<32;i++){lmsgi[i]=in[ip[i]-1];rmsgi[i]=in[ip[i+32]-1];}};////初始逆置换函数voidDES::InitReSwap(boolout[64]){//组合成64数组booltemp[64];for(inti=0;i<32;i++){temp[i]=rmsgi[i];temp[3

6、2+i]=lmsgi[i];}//按照逆ip矩阵for(inti=0;i<64;i++){out[i]=temp[back_ip[i]-1];}};//voidDES::SubKeyOff(bool*_subkey,int_off){booltemp;for(inti=0;i<_off;i++){temp=_subkey[0];for(inti=0;i<27;i++){_subkey[i]=_subkey[i+1];}_subkey[27]=temp;}};1.S盒处理:voidDES::DealSBox(boolin[48],boolout[32]){bool_in[6]

7、,_out[4];//8个盒子for(inti=0;i<8;i++){//提取盒子for(intj=0;j<6;j++){_in[j]=in[i*6+j];}//压缩_DealSBox(_in,_out,i);//放进out数组for(intjj=0;jj<4;jj++){out[i*4+jj]=_out[jj];}}};2.加密函数:voidDES::CrypteFunction(boolin[32],intisubkey,boolout[32]){//e操作booltemp1[48];EOperation(in

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。