求大虾帮我编个C的加密解密程序,代码至少500行。
编好了发到我的邮箱531468385@qq.com
和oaimil_nehc@yahoo.cn
拜托了。
编好了一定送上250分,决不食言。
你的程序C++的老大··
【250分!!】【C语言】加密解密程序
关注:150 答案:5 手机版
解决时间 2021-02-25 19:04
- 提问者网友:十年不久我陪你走
- 2021-02-25 09:46
最佳答案
- 二级知识专家网友:口袋里的自由
- 2021-02-25 10:08
作为一个二十一世纪的大学生,要养成自己动手的习惯!不懂就去图书馆翻阅资料!虽然网上现在很方便!但是不能养成这种坏习惯!
你应该想到如何借助旁边的资料,学校的图书馆就是个很好的地方!去哪找你要的程序肯定找得到!自己动手,丰衣足食!
哎!我这也有个现成的程序!给你发过来了!不过还是希望你下次自己动手!21世纪大学生哦!
你应该想到如何借助旁边的资料,学校的图书馆就是个很好的地方!去哪找你要的程序肯定找得到!自己动手,丰衣足食!
哎!我这也有个现成的程序!给你发过来了!不过还是希望你下次自己动手!21世纪大学生哦!
全部回答
- 1楼网友:久而旧之
- 2021-02-25 14:43
要什么加密机制啊
- 2楼网友:用二逼挥霍青春
- 2021-02-25 13:20
给你一个加密算法 我写的 用异或算法处理文本类的文档
#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);
}
}
}
- 3楼网友:久而旧之
- 2021-02-25 12:26
。。。。。
详见偶的空间
文件压缩本身就是一种加密。可以用这个试试。
- 4楼网友:轉角離身
- 2021-02-25 11:20
#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里放明文就行,明文没限制位数
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!