大众信息网

【250分!!】【C语言】加密解密程序

关注:150  答案:5  手机版
解决时间 2021-02-25 19:04
求大虾帮我编个C的加密解密程序,代码至少500行。
编好了发到我的邮箱531468385@qq.com
和oaimil_nehc@yahoo.cn
拜托了。
编好了一定送上250分,决不食言。

你的程序C++的老大··
最佳答案
作为一个二十一世纪的大学生,要养成自己动手的习惯!不懂就去图书馆翻阅资料!虽然网上现在很方便!但是不能养成这种坏习惯!
你应该想到如何借助旁边的资料,学校的图书馆就是个很好的地方!去哪找你要的程序肯定找得到!自己动手,丰衣足食!

哎!我这也有个现成的程序!给你发过来了!不过还是希望你下次自己动手!21世纪大学生哦!
全部回答
要什么加密机制啊
给你一个加密算法 我写的 用异或算法处理文本类的文档 #include #include #include #include jiemi() { int k,l; char fn[40],fs[40]; char ch,mima[40],x; file *f1,*f2; printf("输入要解密的文件夹名称:"); scanf("%s",fn); if((f1=fopen(fn,"r"))==null) { printf("您的路径有误,系统将不能完成任务,请重新进入。"); getch(); exit(1); } printf("输入您要解密到的文件夹名称:"); scanf("%s",fs); if((f2=fopen(fs,"w"))==null) { printf("您的输入有误,系统将不能完成任务,请重新进入。"); getch(); exit(1); } printf("输入密码:"); scanf("%s",mima); l=strlen(mima); k=0; ch=fgetc(f1); while(ch!=eof) { k=k%l; fputc(ch^mima[k],f2); ch=fgetc(f1); k++; } fclose(f1); fclose(f2); printf("解密成功,请在该软件目录找到您解密的文件。\n"); getch(); } jiami() { int k,l; char fn[20],fs[20]; char ch,mima[40],x; file *f1,*f2; printf("输入要打开的文件夹名称:"); scanf("%s",fn); if((f1=fopen(fn,"r"))==null) { printf("您的路径有误,系统将不能完成任务,请重新进入。"); getch(); exit(1); } printf("输入要保存的文件夹名称:"); scanf("%s",fs); if((f2=fopen(fs,"w"))==null) { printf("您的输入有误,系统将不能完成任务,请重新进入。"); getch(); exit(1); } printf("输入密码:"); scanf("%s",mima); l=strlen(mima); k=0; ch=fgetc(f1); while(ch!=eof) //文件没有到底就继续 ,eof文件的底部 { k=k%l; fputc(ch^mima[k],f2); ch=fgetc(f1); k++; } fclose(f1); fclose(f2); printf("加密成功,请在该软件目录找到您加密的文件。\n"); getch(); } main() { char y; while(1) { printf("说明:欢迎使用文件加密程序,该程序可以将txt文档加密为为不可读文件,解密后返回原状态\n\n"); printf("小提示:输入文件名字的时候请使用字母,数字或下划线。\n并且请加上(文件名).txt的后缀,要加密的文件请放在和程序文件同目录下\n\n"); printf(" ******菜单*******\n"); printf(" * 1.加密 *\n"); printf(" * 2.解密 *\n"); printf(" * 0.退出 *\n"); printf(" *****************\n"); printf(" 请输入要执行的命令:\n"); y=getch(); switch(y) { case '1': jiami();system("cls");break; case '2': jiemi();system("cls");break; case '0': exit(0); } } }
。。。。。 详见偶的空间 文件压缩本身就是一种加密。可以用这个试试。
#include"iostream" #include"bitset" #include"fstream" #include"string" using namespace std; bitset<48>keys [16]; ifstream fin ("text.txt"); ifstream finkey ("key.txt"); ifstream finset ("secret.txt"); ofstream fout ("secret.txt" ,ios::ate); ofstream fouttex ("text1.txt", ios::ate); bitset<64> FirstRe (bitset<64> text) //初始置换IP { int IP[8][8]= { 58,50,42,34,26,18,10,2, 60,52,44,36,28,20,12,4, 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, }; bitset<64> tmp; for(int i=0;i<8;i++) for(int j=0;j<8;j++) tmp[i*8+j]=text[IP[i][j]-1]; return tmp; } bitset<28> leftmv(bitset<28> bitstr,int n) //循环左移 { bitset<28> tmp; tmp=bitstr>>(28-n); bitstr=bitstr< k) { bitset<56> tmp,key; bitset<48> key_chose; bitset<28> c,c1,d,d1; int i,j=0,t; // for(i=0;i<64;i++) // if((i+1)%8) {tmp[j]=k[i];j++;} int PC[8][7]= { 57,49,41,33,25,17, 9, 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,23,15, 7,62,54,46,38,30,22, 14, 6,61,53,45,37,29, 21,13, 5,28,20,12, 4, }; int times[16]={1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1}; //左移次数 int chose2[6][8]= //选择置换2 { 14,17,11,24, 1, 5, 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, }; for(i=0;i<8;i++) for(j=0;j<7;j++) key[i*7+j]=k[(int)PC[i][j]-1]; //PC for(i=0;i<56;i++) if(i<28) d[i]=key[i]; else c[i-28]=key[i]; for(i=0;i<16;i++) { d=leftmv(d,times[i]); c=leftmv(c,times[i]); for(j=0;j<56;j++) if(j<28) key[j]=d[j]; else key[j]=c[j-28]; //next key for(j=0;j<6;j++) for(t=0;t<8;t++) key_chose[j*6+t]=key[chose2[j][t]-1]; keys[i]=key_chose; //子密钥 } } bitset<32> Sbox(bitset<48> t) { //SBOX int S[32][16]= { 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, // S2 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, // S3 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, //S4 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, //S5 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, //S6 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, //S7 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, //S8 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, }; bitset<2> line; bitset<4> row; bitset<4> tmp[8]; bitset<32> ans; int time,i=0,j=0; for(time=0;time<8;time++) { line[0]=t[6*time]; line[1]=t[6*time+5]; for(i=1;i<=4;i++) { row[i-1]=t[6*time+i]; } tmp[time]=(S[4*(7-time)+line.to_ulong()][row.to_ulong()]); } for(time=0;time<8;time++) for(j=0;j<4;j++) ans[4*time+j]=tmp[time][j]; return ans; } bitset<32> secret(bitset<32> r,int n) { int i,j; bitset <32> stmp,stmp1; int tableE[6][8]= { 32, 1, 2, 3, 4, 5, 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, }; int tableP[4][8]= { 16, 7,20,21,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, }; bitset <48> tmp; //E置换 for(i=0;i<6;i++) for(j=0;j<8;j++) tmp[i*6+j]=r[tableE[i][j]-1]; tmp=tmp^keys[n]; stmp=Sbox(tmp); for(i=0;i<4;i++) for(j=0;j<8;j++) stmp1[i*4+j]=stmp[tableP[i][j]-1]; //p置换 return stmp1; } bitset<64> Round (bitset<64> text,int n) { int i; bitset<32> r,l,r1,l1; for(i=0;i<64;i++) if(i<32) r[i]=text[i]; else l[i-32]=text[i]; l1=r; r=secret(r,n); r1=r^l; for(i=0;i<64;i++) if(i<32) text[i]=r1[i]; else text[i]=l1[i-32]; return text; } bitset<64> UNRound (bitset<64> text,int n) { int i; bitset<32> r,l,r1,l1; for(i=0;i<64;i++) if(i<32) r[i]=text[i]; else l[i-32]=text[i]; l1=r; r=secret(r,15-n); r1=r^l; for(i=0;i<64;i++) if(i<32) text[i]=r1[i]; else text[i]=l1[i-32]; return text; } bitset<64> LastRe (bitset<64> text) { int IP_1[8][8]= { 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,58,26, 33, 1,41, 9,49,17,57,25, }; bitset <64> tmp; int i,j; for(i=0;i<8;i++) for(j=0;j<8;j++) tmp[i*8+j]=text[IP_1[i][j]-1]; return tmp; } bitset<64> Change (bitset<64> text) { int i; bitset<32> r,l; for(i=0;i<64;i++) if(i<32) l[i]=text[i]; else r[i-32]=text[i]; for(i=0;i<64;i++) if(i<32) text[i]=r[i]; else text[i]=l[i-32]; return text; } void DES() { char tmp ; string secret,t; bitset <64> text ; //读入明文 int j=0; while(fin>>tmp) { t+=tmp; } for(int i=0;i<(t.size()%8);i++) t+=' '; t.c_str(); for(j=0;j _text ((int)tmp); for(i=0;i<8;i++) { text[(j%8)*8+i]=_text[i]; } if(j!=0 &&(j%8)==7) { text=FirstRe(text); //初始置换 for(int i=0;i<16;i++) text=Round(text,i); //16轮 text=Change(text); //32位互换 text=LastRe(text); //逆初始置换 secret=text.to_string(); cout<<"write"< _text; while(finset>>tmp) { sec+=tmp; i++; if(i%64==0) { bitset<64> text (sec); text=FirstRe(text); //初始置换 for(int i=0;i<16;i++) text=UNRound(text,i); //16轮 text=Change(text); //32位互换 text=LastRe(text); secret=text.to_string(); for(i=0;i<64;i++) { _text[i%8]=text[i]; if((i%8)==7) { cout<<(char)_text.to_ulong(); fouttex<<(char)_text.to_ulong(); } } cout<>tmp) { key+=tmp; } bitset<64> k (key); Keys(k); //产生KEY DES(); INDES(); return 0; } DES 加密解密 要运行还需要一个64位的key.txt文件和text.txt文件,key是密钥,text里放明文就行,明文没限制位数
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!