c语言程序设计文件加密解密

文件加密与解密(1)文件加密(2)文件解密说明:将某一已知文件的内容以字符形式读出,与密钥(用户从键盘输入)的对应字符进行异或操作即可,解密同样如此。如:设原文为ab12... 文件加密与解密
(1)文件加密
(2)文件解密
说明:将某一已知文件的内容以字符形式读出,与密钥(用户从键盘输入)的对应字符进行异或操作即可,解密同样如此。
如:设原文为ab1234,密钥为56,则有
ab1234
565656
按二进制进行异或操作即可得到密文(乱码
展开
 我来答
匿名用户
2013-07-28
展开全部
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

main()
{
void sc(char *fp,char *key,int Flen,int Klen);
FILE *fp;
char *pBuf,filename[20],key[20],ch;

printf("请输入选择:A、加密 B、解密 C退出\n");
ch=getchar();
while(ch!='c'&&ch!='C')
{
if(ch=='a'||ch=='A'||ch=='b'||ch=='B')
{
printf("请输入要打开的文件名:\n");
scanf("%s",filename);
if((fp=fopen(filename,"rb"))==NULL)
{printf("无法打开文件,请注意输入后缀!\n");<br/> exit(0);<br/> }

fseek(fp,0,SEEK_END);
int len=ftell(fp);
pBuf=new char[len+1];
rewind(fp);
fread(pBuf,1,len,fp);
pBuf[len]=0;
printf("%s\n",pBuf);
fclose(fp);

printf("请输入加密/解密的密码:\n");
scanf("%s",key);
sc(pBuf,key,len,strlen(key));

printf("请输入保存加密文件的文件名:\n");
scanf("%s",filename);
if((fp=fopen(filename,"wb"))==NULL)
{printf("无法保存文件,请注意磁盘是否已满!\n");<br/> exit(0);<br/> }
else
fwrite(pBuf,1,len,fp);
fclose(fp);
printf("请输入选择:A、加密 B、解密 C退出\n");
}
else {
printf("输入错误,请重新输入\n");
}
ch=getchar();
ch=getchar();
}
}
void sc(char *fp,char *key,int Flen,int Klen)
{int i,j,k;<br/>for(i=0;i<Flen;i+=Klen)<br/>for(j=i,k=0;k<Klen;j++,k++)<br/>fp[j]^=key[k];<br/><br/>fp[i]='\0';<br/>printf("%s\n",fp);<br/>}
匿名用户
推荐于2016-03-16
展开全部

通过XOR的方式进行简单加密

C语言文件加密解密,参考如下:

# include <stdio.h>  
# include <unistd.h>  
# define NORMAL_SIZ BUFSIZ  
  
char buf[NORMAL_SIZ];  
  
#define CHMSK_KEY 0xa5  
  
int main(int argc, char **argv)  
{  
    FILE *fp = fopen(argv[1], "rb+");  
    int n;  
      
    while ((n = fread(buf, 1, NORMAL_SIZ, fp)) > 0)  
    {  
        int i;  
         
        for (i = 0; i < n; i++)  
        {  
            buf[i] ^= CHMSK_KEY;  
        }  
          
        if (fseek(fp, -n, SEEK_CUR) == -1)  
        {  
            perror("fseek");  
        }  
          
        n = fwrite(buf, 1, n, fp);  
        fflush(fp);//如果不加这句,那么文件大小如果小于库函数缓冲(默认是BUFSIZ大小)时实际上面的写操作并没写进去,从而导致下一次read还是成功,因此程序不会退出  。
        buf[0] = 0;  
    }  
  
    fclose(fp);  
    return 0;  
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-07-28
展开全部
网上找的,看看合不合用:
#include <stdio.h>
#include <stdlib.h>

int menu(void);
void jiami(void);
void (*ptr)(void);
void delfile(void);
void quit(void);
int main(void)
{
int n;
while(1)
{
n=menu();
switch(n)
{
case 1:
case 2: ptr=jiami; break;
case 3: ptr=delfile; break;
case 4: ptr=quit; break;
}
ptr();
}
return 0;
}
int menu(void)
{
int n;
do
{
puts("\n你要做什么?");
puts("\t\t\t\t1.文件加密");
puts("\t\t\t\t2.文件解密");
puts("\t\t\t\t3.删除文件");
puts("\t\t\t\t4.退出程序");
fflush(stdin);
scanf("%d",&n);
}while(n<1||n>4);
return n;
}

void jiami(void)
{
FILE *fp1 , *fp2;
char c , ch , oldfile[20] , tmpfile[24];
unsigned long j;
puts("提示:当你第一次运行本程序,是加密.再运行一次,则是解密.");
puts("\n请输入要加密或解密的文件和路径例如 d:\\abc.txt");
fflush(stdin);
gets(oldfile);
tmpnam(tmpfile);
puts("请输入密码");
scanf("%u",&j);
if((fp1=fopen(oldfile,"rb"))==NULL)
{
puts("意外错误回车键退出");
getch();
exit(0);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式