资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
第9页 / 共16页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
DES算法的C语言代码及实现首先新建头文件des_encode.H内容如下:void EncodeMain(); /EncodeMain functionvoid DecodeMain(); /Sorry ,it has not usedvoid Decode(int *str,int *keychar); /decode :input 8 chars,8 keycharsvoid Encode(int *str,int *keychar); /encode: input 8 chars,8 keycharsvoid keyBuild(int *keychar); /create key arrayvoid StrtoBin(int *midkey,int *keychar); /change into binaryvoid keyCreate(int *midkey2,int movebit,int i); /call by keyBuildvoid EncodeData(int *lData,int *rData,int *srt); /encodedata functionvoid F(int *rData,int *key); /F functionvoid Expand(int *rData,int *rDataP); /Expand functionvoid ExchangeS(int *rDataP,int *rData); /S-diagram change void ExchangeP(int *rData); /P changevoid FillBin(int *rData,int n,int s); / data to binary;call by S-Diagram change functionvoid DecodeData(int *str,int *lData,int *rData); /DecodeData from binaryint IP1=58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, /initial change62, 54, 46, 38, 30, 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,;int IP2=40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, /opp initial change38, 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, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25;int s416= /S-diagram array14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11;int Ex48= 32,1,2,3,4,5, /Expand array4,5,6,7,8,9,8,9,10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32,1;int P32=16,7,20,21, /P-change29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25;int PC156=57,49,41,33,25,17,9, /PC-1 in keyBuild1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,33,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4;int PC248=14,17,11,24,1,5, /PC-2 in keyBuild3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32;再创建des.cpp内容如下:#include#include#includedes_encode.hint key1648;char str8;void main() /main functionEncodeMain();void EncodeMain() /EncodeMain functionint i;char keychar8;int key28;int strkey8;printf(请输入8个要加密的字符:n);for(i=0;i8;i+)scanf(%c,&stri);getchar();for(i=0;i8;i+)strkeyi=stri;printf(n输入明文的十六进制为:n);for(i=0;i8;i+)printf(%10x,strkeyi);printf(n请输入密钥(8个字符):n);for(i=0;i8;i+)scanf(%c,&keychari);for(i=0;i8;i+)key2i=keychari;getchar();/ printf(%c,keychari);Encode(strkey,key2);printf(n加密后十六进制密文是:n);for(i=0;i8;i+)printf(%10x,strkeyi);printf(nn清输入解密密码n);for(i=0;i8;i+)scanf(%c,&keychari);for(i=0;i8;i+)key2i=keychari;Decode(strkey,key2);for(i=0;i8;i+)printf(%10x,strkeyi);for(i=0;i8;i+)stri=strkeyi;printf(n明文为:t);for(i=0;i8;i+)printf(%c,stri);printf(nn);void keyBuild(int *keychar) /create key arrayint i,j;int movebit=1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1;int midkey256;int midkey64;StrtoBin(midkey,keychar);for(i=0;i56;i+)midkey2i=midkeyPC1i-1;for(i=0;i16;i+)keyCreate(midkey2,movebiti,i);void StrtoBin(int *midkey,int *keychar) /change into binaryint trans8,i,j,k,n;n=0;for(i=0;i8;i+)j=0;while(keychari
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号