欢迎来到天天文库
浏览记录
ID:39549419
大小:53.50 KB
页数:16页
时间:2019-07-06
《DES的C语言源码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、DES算法由加密、解密和子密钥的生成三部分组成。 DES算法处理的数据对象是一组64比特的明文串。设该明文串为m=m1m2…m64(mi=0或1)。明文串经过64比特的密钥K来加密,最后生成长度为64比特的密文E。 加密过程主要涉及明文串的IP置换,F函数,子密钥的生成,SBox置换,IP逆置换。 DES算法密钥有效位是56位,即用56位的密钥来加密64位的数据。加密期间56位密钥要扩展成64位的密钥,加入奇偶效验位。我想主要是用来传输密钥用的吧,怕传输过程中出错。当然传输过程中还得对密钥加密(一般使用非对称加密)。 ucharVerifyOddEve
2、n(ucharx){ unsignedintn; ucharucTemp=x; x>>=1; for(n=0;x;n++) { x&=x-1; } if(n%2==0) { if(!(ucTemp&1)) { ucTemp+=1; } } returnucTemp;}voidChgKey56To64(uchar*pszKey,uchar*pszKeyOut){ ucharucSave=0; ucharucTemp,ucFill; for(inti=0;
3、i<8;i++) { ucTemp=pszKey[i]>>i; ucFill=ucSave+ucTemp; pszKeyOut[i]=VerifyOddEven(ucFill); ucSave=pszKey[i]<<(7-i); }} 实现该算法,我采用的数据类型是UNSIGNEDLONG,写得比较繁琐,应该使用CHAR数组的。故我又写了一些函数来测试使用(将数据以十六进制的格式输出)。 voidDispHex(ucharucData){ ucharucTemp; ucharucDisp; uc
4、Temp=ucData&240; ucTemp=ucTemp>>4; if(ucTemp<10) { ucDisp=ucTemp+'0'; cout<5、5; cout<>((3-i)*8); 6、 ucTemp=ulTemp&0x000000FF; DispHex(ucTemp); } cout<7、tL,ulDataOutR,Array,nArrLen,core,0,0x80000000);}voidReplace64To56(ulongulDataL,ulongulDataR,ulong*ulDataOutL,ulong*ulDataOutR,intArray[],intnArrLen,intcore){ ReplaceCore(ulDataL,ulDataR,ulDataOutL,ulDataOutR,Array,nArrLen,core,4,0x80000000);}voidReplace56To48(ulongulDataL,ulongulDa
5、5; cout<>((3-i)*8);
6、 ucTemp=ulTemp&0x000000FF; DispHex(ucTemp); } cout<7、tL,ulDataOutR,Array,nArrLen,core,0,0x80000000);}voidReplace64To56(ulongulDataL,ulongulDataR,ulong*ulDataOutL,ulong*ulDataOutR,intArray[],intnArrLen,intcore){ ReplaceCore(ulDataL,ulDataR,ulDataOutL,ulDataOutR,Array,nArrLen,core,4,0x80000000);}voidReplace56To48(ulongulDataL,ulongulDa
7、tL,ulDataOutR,Array,nArrLen,core,0,0x80000000);}voidReplace64To56(ulongulDataL,ulongulDataR,ulong*ulDataOutL,ulong*ulDataOutR,intArray[],intnArrLen,intcore){ ReplaceCore(ulDataL,ulDataR,ulDataOutL,ulDataOutR,Array,nArrLen,core,4,0x80000000);}voidReplace56To48(ulongulDataL,ulongulDa
此文档下载收益归作者所有