des C语言源代码,更换数据类型
来源:互联网 发布:marc dorcel 知乎 编辑:程序博客网 时间:2024/04/29 21:49
<script type="text/javascript"><!--google_ad_client = "pub-3527323059587280";/* 468x60, 创建于 08-10-10 */google_ad_slot = "6038158497";google_ad_width = 468;google_ad_height = 60;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
/********DES Encript by namgking*******"FileName:des_encode.h"*********//********compile on windows xp sp2,C-Free 3.5*******************************//********E-mail: namg2000@163.com*****************************************//********Author: namgking*****************************************************//********Note: if the code is of using,it's coded by namgking,*************//********or I don't know who did it!^_^****Modifyed date:2008-7-8*******/void EncodeMain(); //EncodeMain functionvoid DecodeMain(); //Sorry ,it has not usedvoid Decode(unsigned char *str,unsigned char *keychar); //decode :input 8 chars,8 keycharsvoid Encode(unsigned char *str,unsigned char *keychar); //encode: input 8 chars,8 keycharsvoid keyBuild(unsigned char *keychar); //create key arrayvoid StrtoBin(unsigned char *midkey,unsigned char *keychar); //change into binaryvoid keyCreate(unsigned char *midkey2,int movebit,int i); //call by keyBuildvoid EncodeData(unsigned char *lData,unsigned char *rData,unsigned char *srt); //encodedata functionvoid F(unsigned char *rData,unsigned char *key); //F functionvoid Expand(unsigned char *rData,unsigned char *rDataP); //Expand functionvoid ExchangeS(unsigned char *rDataP,unsigned char *rData); //S-diagram changevoid ExchangeP(unsigned char *rData); //P changevoid FillBin(unsigned char *rData,int n,int s); // data to binary;call by S-Diagram change functionvoid DecodeData(unsigned char *str,unsigned char *lData,unsigned char *rData); //DecodeData from binaryunsigned char IP1[]={58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, //initial change 62, 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, };unsigned char IP2[]={40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, //opp initial change 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, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25 };/*unsigned char IP3[]= {40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, //opp initial change 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, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25 };*/unsigned char s[][4][16]={{ //S-diagram array {14,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} }};unsigned char Ex[48]={ 32,1,2,3,4,5, //Expand array 4,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 };unsigned char P[32]={16,7,20,21, //P-change 29,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 };unsigned char PC1[56]={57,49,41,33,25,17,9, //PC-1 in keyBuild 1,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 };unsigned char PC2[48]={14,17,11,24,1,5, //PC-2 in keyBuild 3,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 Encript by namgking*******"FileName:des_encode.cpp"************//********compile on windows xp sp2,C-Free 3.5*******************************//********E-mail: namg2000@163.com******************************************//********Author: namgking************************************************//********Note: if the code is of using,it's coded by namgking,*************//********or I don't know who did it!^_^****Modifyed date:2008-7-8**********/#include<stdio.h>#include<string.h>#include"des_encode.h"unsigned char key[16][48];char str[8];void main() //main function{ EncodeMain();}void EncodeMain() //EncodeMain function{ int i; char keychar[8]; unsigned char key2[8]; unsigned char strkey[8]; printf("请输入8个要加密的字符:/n"); for(i=0;i<8;i++) scanf("%c",&str[i]); getchar(); for(i=0;i<8;i++) strkey[i]=str[i]; printf("/n输入明文的十六进制为:/n"); for(i=0;i<8;i++) printf("%10x",strkey[i]); printf("/n请输入密钥(8个字符):/n"); for(i=0;i<8;i++) scanf("%c",&keychar[i]); for(i=0;i<8;i++) key2[i]=keychar[i]; getchar(); // printf("%c",keychar[i]); Encode(strkey,key2); printf("/n加密后十六进制密文是:/n"); for(i=0;i<8;i++) printf("%10x",strkey[i]); printf("/n/n清输入解密密码/n"); for(i=0;i<8;i++) scanf("%c",&keychar[i]); for(i=0;i<8;i++) key2[i]=keychar[i]; Decode(strkey,key2); for(i=0;i<8;i++) printf("%10x",strkey[i]); for(i=0;i<8;i++) str[i]=strkey[i]; printf("/n明文为:/t"); for(i=0;i<8;i++) printf("%c",str[i]); printf("/n/n");}void keyBuild(unsigned char *keychar){ //create key array int i,j; int movebit[]={1,1,2,2,2,2,2,2, 1,2,2,2,2,2,2,1}; unsigned char midkey2[56]; unsigned char midkey[64]; StrtoBin(midkey,keychar); for(i=0;i<56;i++) midkey2[i]=midkey[PC1[i]-1]; for(i=0;i<16;i++) keyCreate(midkey2,movebit[i],i); }void StrtoBin(unsigned char *midkey,unsigned char *keychar){ //change into binary int trans[8],i,j,k,n; n=0; for(i=0;i<8;i++){ j=0; while(keychar[i]!=0){ trans[j]=keychar[i]%2; keychar[i]=keychar[i]/2; j++; } for(k=j;k<8;k++)trans[k]=0; for(k=0;k<8;k++) midkey[n++]=trans[7-k]; } }void keyCreate(unsigned char *midkey2,int movebit,int n){ int i,temp[4]; temp[0]=midkey2[0]; temp[1]=midkey2[1]; temp[2]=midkey2[28]; temp[3]=midkey2[29]; if(movebit==2){ for(i=0;i<26;i++){ midkey2[i]=midkey2[i+2]; midkey2[i+28]=midkey2[i+30]; } midkey2[26]=temp[0];midkey2[27]=temp[1]; midkey2[54]=temp[2];midkey2[55]=temp[3]; } else { for(i=0;i<27;i++){ midkey2[i]=midkey2[i+1]; midkey2[i+28]=midkey2[i+29]; } midkey2[27]=temp[0];midkey2[55]=temp[2]; } for(i=0;i<48;i++) key[n][i]=midkey2[PC2[i]-1];}void EncodeData(unsigned char *lData,unsigned char *rData,unsigned char *str){ //encodedata function int i,j,temp[8],lint,rint;//int h; int data[64]; lint=0,rint=0; for(i=0;i<4;i++){ j=0; while(str[i]!=0){ temp[j]=str[i]%2; str[i]=str[i]/2; j++; } while(j<8)temp[j++]=0; for(j=0;j<8;j++) lData[lint++]=temp[7-j]; j=0; while(str[i+4]!=0){ temp[j]=str[i+4]%2; str[i+4]=str[i+4]/2; j++; } while(j<8)temp[j++]=0; for(j=0;j<8;j++)rData[rint++]=temp[7-j]; } for(i=0;i<32;i++){ data[i]=lData[i]; data[i+32]=rData[i]; } for(i=0;i<32;i++){ lData[i]=data[IP1[i]-1];//printf("P1:%5d:%5d,%5d/n",IP1[i],lData[i],data[IP1[i]-1]); rData[i]=data[IP1[i+32]-1]; } }void F(unsigned char *rData,unsigned char *key){ //F function int i; unsigned char rDataP[48]; Expand(rData,rDataP); for(i=0;i<48;i++){ rDataP[i]=rDataP[i]^key[i];// printf("%10d",rDataP[i]);if((i+1)%6==0)printf("/n"); } ExchangeS(rDataP,rData); ExchangeP(rData); }void Expand(unsigned char *rData,unsigned char *rDataP){ //Expand function int i; for(i=0;i<48;i++) rDataP[i]=rData[Ex[i]-1]; }void ExchangeS(unsigned char *rDataP,unsigned char *rData){ //S-diagram change int i,n,linex,liney; linex=liney=0; for(i=0;i<48;i+=6){ n=i/6; //printf("%10d/n",(rDataP[i]<<1)); linex=(rDataP[i]<<1)+rDataP[i+5]; liney=(rDataP[i+1]<<3)+(rDataP[i+2]<<2)+(rDataP[i+3]<<1)+rDataP[i+4]; FillBin(rData,n,s[n][linex][liney]); } }void ExchangeP(unsigned char *rData){ //P change int i,temp[32]; for(i=0;i<32;i++) temp[i]=rData[i]; for(i=0;i<32;i++) rData[i]=temp[P[i]-1]; }void FillBin(unsigned char *rData,int n,int s){ // data to binary;call by S-Diagram change function int temp[4],i; for(i=0;i<4;i++){ temp[i]=s%2; s=s/2; } for(i=0;i<4;i++) rData[n*4+i]=temp[3-i]; }void DecodeData(unsigned char *str,unsigned char *lData,unsigned char *rData){ //DecodeData from binary int i;int a,b;int data[64]; a=0,b=0; for(i=0;i<32;i++){ data[i]=lData[i]; data[i+32]=rData[i]; } for(i=0;i<32;i++){ lData[i]=data[IP2[i]-1]; rData[i]=data[IP2[i+32]-1]; } for(i=0;i<32;i++){ a=(lData[i]&0x1)+(a<<1); b=(rData[i]&0x1)+(b<<1); if((i+1)%8==0){ str[i/8]=a;a=0;//printf("%d",i/8); str[i/8+4]=b;b=0;//printf("%d",i/8+4); } } } void Encode(unsigned char *str,unsigned char *keychar){ //encode: input 8 chars,8 keychars unsigned char lData[32],rData[32],temp[32],rDataP[48]; int i,j; keyBuild(keychar); EncodeData(lData,rData,str); for(i=0;i<16;i++){ for(j=0;j<32;j++) temp[j]=rData[j]; F(rData,key[i]); for(j=0;j<32;j++){ rData[j]=rData[j]^lData[j]; } for(j=0;j<32;j++) lData[j]=temp[j]; } DecodeData(str,rData,lData);}void Decode(unsigned char *str,unsigned char *keychar){ //decode :input 8 chars,8 keychars unsigned char lData[32],rData[32],temp[32],rDataP[48]; int i,j; keyBuild(keychar); EncodeData(lData,rData,str); //这个位置 for(i=0;i<16;i++){ for(j=0;j<32;j++) temp[j]=rData[j]; F(rData,key[15-i]); for(j=0;j<32;j++){ rData[j]=rData[j]^lData[j]; } for(j=0;j<32;j++){ lData[j]=temp[j]; } } DecodeData(str,rData,lData);}<script type="text/javascript"><!--google_ad_client = "pub-3527323059587280";/* 468x60, 创建于 08-10-10 */google_ad_slot = "6038158497";google_ad_width = 468;google_ad_height = 60;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- des C语言源代码,更换数据类型
- DES的C语言源代码
- DES算法C语言可运行源代码
- DES加密算法原理 -附带C语言实现源代码
- DES(C语言实现)
- DES算法C语言源码
- C语言实现DES算法
- c语言实现des加密
- c语言des加密算法实现
- 【C语言】C语言数据类型
- c语言-数据类型-基本数据类型
- Linux下c语言实现DES和3DES算法
- Linux下c语言实现DES和3DES算法
- DES和3DES加密算法C语言实现
- C语言病毒源代码
- C语言库函数源代码
- C语言小游戏源代码
- Ping 源代码-C语言
- 人生快乐十要决
- 李彦宏在北大2008本科生毕业典礼上的发言(图)
- Flex CSS control-by StyleManager class
- 深入浅出ShellExecute
- 一列宽度自适应
- des C语言源代码,更换数据类型
- 生命的价值
- 无端被公司解雇,决定通过劳动法与公司纠缠到底,兄弟们来支持一把
- 【转】 Session详解[郎云鹏]
- CUDA是什么
- QQ聊天记录的存储格式
- 一列固定宽度居中
- 教你克服求职中的犹豫不决
- 让GridView中CheckBox列支持FireFox