《DES算法的C语言代码及实现》由会员分享,可在线阅读,更多相关《DES算法的C语言代码及实现(16页珍藏版)》请在金锄头文库上搜索。
1、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 ar
2、rayvoid 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 Excha
3、ngeS(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,
4、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 chan
5、ge38, 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,
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
7、,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,
8、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,
9、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,
10、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,4
11、7,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;
12、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);fo
13、r(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,st
14、rkeyi);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