#include<stdlib.h>
#include<string.h>
void encfile(char *in_filename,char *pwd,char *out_filename)/*对文件进行加密的具体函数*/
void decryptfile(char* in_filename,char *pwd,char *out_filename) /*对文件解密的具体函数*/
int main(int argc,char *argv[])/*定义main()函数的命令行参数*/
{
int option /*功能选择*/
char in_filename[30]/*用户输入的要加密的文件名 或是 要解密的文件*/
char out_filename[30] /*用户输入加密后保存的文件名 或是解密保存的文件名*/
char pwd[8]/*用来保存密码*/
printf(" thank you for using this program....../n")
printf("1. Encrypt a file 2. Decrypt a file/n")
printf("chose your option.....")
scanf("%d",&option)
getchar()
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)/*得到加密后你要的文件名*/
}
else{/*如果命令行参数正确,便直接运行程序*/
strcpy(in_filename,argv[1])
strcpy(pwd,argv[2])
strcpy(out_filename,argv[3])
}
switch(option){
case 1: //加密
encfile(in_filename,pwd,out_filename)/*加密函数调用*/
break
case 2://解密
decryptfile(in_filename,pwd,out_filename)/*解密函数调用*/
break
default:
break
}
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,"r")/*打开要加密的文件*/
if(fp1==NULL){
printf("cannot open in-file./n")
exit(1)/*如果不能打开要加密的文件,便退出程序*/
}
fp2=fopen(out_file,"w")
if(fp2==NULL){
printf("cannot open or create out-file./n")
exit(1)/*如果不能建立加密后的文件,便退出*/
}
while(pwd[++j0])
ch=fgetc(fp1)
/*加密算法开始*/
while(!feof(fp1)){
if(j0 >7)
j0 = 0
ch += pwd[j0++]
fputc(ch,fp2)
ch=fgetc(fp1)
}
fclose(fp1)/*关闭源文件*/
fclose(fp2)/*关闭目标文件*/
}
/*解密子函数开始*/
void decryptfile(char *in_filename,char *pwd,char *out_file)
{
FILE *fp1,*fp2
register char ch
int j=0
int j0=0
fp1=fopen(in_filename,"r")/*打开要解密的文件*/
if(fp1==NULL){
printf("cannot open in-file./n")
exit(1)/*如果不能打开要解密的文件,便退出程序*/
}
fp2=fopen(out_file,"w")
if(fp2==NULL){
printf("cannot open or create out-file./n")
exit(1)/*如果不能建立解密后的文件,便退出*/
}
while(pwd[++j0])
ch=fgetc(fp1)
/*解密算法开始*/
while(!feof(fp1)){
if(j0 >7)
j0 = 0
ch -= pwd[j0++]
fputc(ch,fp2)/*我的解密算法*/
ch=fgetc(fp1)
}
fclose(fp1)/*关闭源文件*/
fclose(fp2)/*关闭目标文件*/
}
这个我不会。给文件加密,我使用的是超级加密3000.
超级加密 3000采用先进的加密算法,使你的文件和文件夹加密后,真正的达到超高的加密强度,让你的加密数据无懈可击。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
FILE *fptr
FILE *kptr
FILE *dptr
int key[1000]={0}
char original[1000],encrypted[1000]
void initial()
{
fptr=fopen("encrypted.txt","wb+")
kptr=fopen("key.txt","wb+")
}
void encryption(char original[],char entercrypted[],int key[])
{
int i,len
len=strlen(original)
printf("The original text is:")
puts(original)
for(i=0i<leni++)
entercrypted[i] = original[i] + key[i]
entercrypted[i]=0
for(i=0i<leni++)
{
printf("%c",fputc(entercrypted[i],fptr))
}
for(i=0i<1000i++)
fprintf(kptr,"%d",key[i])
printf("Encrypted is:%s\n\n",entercrypted)
}
void decryption(char original[],char entercrypted[],int key[])
{
int i,len
len=strlen(original)
for(i=0i<leni++)
original[i]=entercrypted[i]-key[i]
original[i]=0
printf("Original is:%s\n\n",original)
}
int main()
{
int i
int choice
initial()
puts("input original message:")
gets(original)
srand(time(NULL))
for(i=0i<1000i++)
key[i] = rand()%72
while(1)
{
printf("If you want to encrypte please enter 1\n")
printf("If you want to decrypte please enter 2\n")
printf("If you want to stop the programm please enter 3\n")
printf("Your choice is:")
scanf("%d",&choice)
switch(choice)
{
case 1:
encryption( original, encrypted, key)
break
case 2:
decryption( original, encrypted, key)
break
default: return 0
}
}
}
已经帮你改好了!但是你的程序有很大的问题,因为程序只有在执行完之后才会在文件文件中显示输入文件中的内容,所以无法再执行过程中入读密文。如果第二次打开后再读入密文的话,那么程序又会随机生成新的密钥,所以解密时我直接读取的entercrypted字符数组。你的加密方式其实并不安全,建议你可以选择des加密,个人使用的话安全性没问题,而且速度非常之快,如果你对安全性有更高的要求话,你可以选择pgp,那是目前安全性最高的加密软件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)