这里使用的是按位加密,按ASCII码进行加密的算法自己写个,很容易的。
#include<stdioh>
#include<stdlibh>
#include<conioh>
#include<stringh>
void
dofile(char
in_fname,char
pwd,char
out_fname);/对文件进行加密的具体函数/
void
usage(char
name);
void
main(int
argc,char
argv[])/定义main()函数的命令行参数/
{
char
in_fname[30];/用户输入的要加密的文件名/
char
out_fname[30];
char
pwd[10];/用来保存密码/
if(argc!=4)
{/容错处理/
usage(argv[0]);
printf("\nIn-fname:\n");
gets(in_fname);/得到要加密的文件名/
while(in_fname==NULL)
{
printf("\nIn-fname:\n");
gets(in_fname);
}
printf("Password
6-8:\n");
gets(pwd);/得到密码/
while(pwd==NULL
||
strlen(pwd)>8
||
strlen(pwd)<6)
{
printf("Password
6-8:\n");
gets(pwd);
}
printf("Out-file:\n");
gets(out_fname);/得到加密后你要的文件名/
while(in_fname==NULL)
{
printf("Out-file:\n");
gets(out_fname);
}
while(!strcmp(in_fname,out_fname))
{
printf("文件名不能和源文件相同\n");
printf("Out-file:\n");
gets(out_fname);
}
dofile(in_fname,pwd,out_fname);
printf("加密成功,解密请再次运行程序\n");
}
else
{/如果命令行参数正确,便直接运行程序/
strcpy(in_fname,argv[1]);
strcpy(pwd,argv[2]);
strcpy(out_fname,argv[3]);
while(pwd==NULL
||
strlen(pwd)>8
||
strlen(pwd)<6)
{
printf("Password
faied!\n");
printf("Password
6-8:\n");
gets(pwd);
}
while(!strcmp(in_fname,out_fname))
{
printf("文件名不能和源文件相同\n");
printf("Out-file:\n");
gets(out_fname);
while(in_fname==NULL)
{
printf("Out-file:\n");
gets(out_fname);
}
}
dofile(in_fname,pwd,out_fname);
printf("加密成功,解密请再次运行程序\n");
}
}
/加密子函数开始/
void
dofile(char
in_fname,char
pwd,char
out_file)
{
FILE
fp1,fp2;
register
char
ch;
int
j=0;
int
j0=strlen(pwd);
fp1=fopen(in_fname,"rb");
if(fp1==NULL)
{
printf("cannot
open
in-file\n");
exit(1);/如果不能打开要加密的文件,便退出程序/
}
fp2=fopen(out_file,"wb");
if(fp2==NULL)
{
printf("cannot
open
or
create
out-file\n");
exit(1);/如果不能建立加密后的文件,便退出/
}
/加密算法开始/
while(j0>=0)
{
ch=fgetc(fp1);
while(!feof(fp1))
{
fputc(ch^pwd[j>=j0j=0:j++],fp2);/异或后写入fp2文件/
ch=fgetc(fp1);
}
j0--;
}
fclose(fp1);/关闭源文件/
fclose(fp2);/关闭目标文件/
}
void
usage(char
name)
{
printf("\t=======================File
encryption======================\n");
printf("\tusage:
%s
In-fname
password
out_fname\n",name);
printf("\tExample:
%s
file1txt
12345678
file2txt\n",name);
}
通常加密解密都是采用异或运算
例如:
char c = 'A';
c ^= (char)7; // 加密, 此时c的值是'F'
c ^= (char)7; // 解密, 此时c的值是'A'
这个只是一个简单的例子, 密钥是7, 你可以进行多次异或运算来提高算法难度
我已经在另一个问题中回答了
>
这样就可以了
#include<stdioh>
voidcode(charp,intkey)
{
while(p!='\0')
{
p=97+(p-97+key)%26;
p++;
}
}
voiduncode(charp,intkey)
{
while(p!='\0')
{
p=97+(p-71-key)%26;
p++;
}
}
main()
{
charstr[100];
intn,key;
printf("输入密匙:");
scanf("%d",&key);
printf("输入1加密,输入2解密:");
scanf("%d",&n);
printf("输入字符串:");
scanf("%s",str);
if(n==1)
{
code(str,key);
printf("密文为%s\n",str);
}
elseif(n==2)
{
uncode(str,key);
printf("原文为%s\n",str);
}
}
在下面程序的基础上改写一下算法。
#include<stdioh>
#include<stdlibh>
#include<stringh>
void encfile(char in_filename,char pwd,char out_filename);/对文件进行加密的具体函数/
int main(int argc,char argv[])/定义main()函数的命令行参数/
{
char in_filename[30];/用户输入的要加密的文件名/
char out_filename[30]; /用户输入加密后保存的文件名/
char pwd[8];/用来保存密码/
if(argc!=4){/容错处理/
printf("\nPlease input In-filename:\n");
gets(in_filename);/得到要加密的文件名/
printf("Please input your Password:\n");
gets(pwd);/得到密码/
printf("Please input Out-filename:\n");
gets(out_filename);/得到加密后你要的文件名/
encfile(in_filename,pwd,out_filename);/函数调用/
}
else{/如果命令行参数正确,便直接运行程序/
strcpy(in_filename,argv[1]);
strcpy(pwd,argv[2]);
strcpy(out_filename,argv[3]);
encfile(in_filename,pwd,out_filename);
}
system("pause");
return 0;
}
/加密子函数开始/
void encfile(char in_filename,char pwd,char out_file)
{
FILE fp1,fp2;
register char ch;
int j=0;
int j0=0;
fp1=fopen(in_filename,"rb");/以二进制只读方式打开要加密的文件/
if(fp1==NULL){
printf("cannot open in-file\n");
exit(1);/如果不能打开要加密的文件,便退出程序/
}
fp2=fopen(out_file,"wb");
if(fp2==NULL){
printf("cannot open or create out-file\n");
exit(1);/如果不能建立加密后的文件,便退出/
}
while(pwd[++j0]);
ch=fgetc(fp1);
/加密算法开始/
while(!feof(fp1)){
fputc(ch^pwd[j>=j0j=0:j++],fp2);/异或后写入fp2文件/
ch=fgetc(fp1);
}
fclose(fp1);/关闭源文件/
fclose(fp2);/关闭目标文件/
}
直接对字符串按字符加减密钥的位数就可以了。
#include
<iostreamh>
#define
MAX
1000
//加密
char
Encryption(char
E,int
Key)
{
for(int
i=0;(E+i);i++)
{
(E+i)
+=
Key;
if((E+i)>'z')
(E+i)
-=
('z'-'a')+1;
}
return
E;
}
//解密
char
Decryption(char
E,int
Key)
{
for(int
i=0;(E+i);i++)
{
(E+i)
-=
Key;
if((E+i)<'a')
(E+i)
+=
('z'-'a')+1;
}
return
E;
}
void
main()
{
char
a[MAX];
int
key;
cout<<"输入字符串:"<<endl;
cin
>>
a;
cout<<"输入密钥:"<<endl;
cin
>>key;
cout<<"加密输出:"<<Encryption(a,key)<<endl;
cout<<"解密输出:"<<Decryption(a,key)<<endl;
}
以上就是关于c语言加密解密算法全部的内容,包括:c语言加密解密算法、c#中如何完成一个字符加密解密程序(如A加密后为F)、跪求c语言编程问题文件移位加密与解密急!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)