| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 278 人关注过本帖
标题:用或运算符对文件的加密解密
只看楼主 加入收藏
十里画码
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2018-7-9
结帖率:100%
  已结贴   问题点数:20  回复次数:10   
用或运算符对文件的加密解密
1.文件加密解密系统;
加密解密原理:通过位运算符异或“^”实现
原文件         密钥        加密后的文件


我写的代码运行时我输入一个字符串,然后用六位数字字符去加密,解密之后,得到的字符串和原来的字符串相比,少了第一个字符
这是我运行的情况:
文件打开成功!
1.加密
2.解密
3.结束
请输入想要执行功能的序号:1
请输入原文件:qwqreqwr
请输入密钥:123456
已加密!
1.加密
2.解密
3.结束
请输入想要执行功能的序号:2
请输入密钥:123456
wqreqwr


求路过的大神指点.
这是我写的代码:
#include<stdio.h>
#include<stdlib.h>
void jiemi(FILE *fp,FILE *fp1);
void jiami(FILE *fp,FILE *fp1);

int main(int argc,char *argv[])
{
    FILE *fp,*fp1;
    fp=fopen(argv[1],"w+");
    fp1=fopen(argv[2],"w+");
    if(fp==NULL||fp1==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    else
    {
        printf("文件打开成功!\n");
    }
    while(1)
    {
        char n;
        printf("1.加密\n");
        printf("2.解密\n");
        printf("3.结束\n");
loop:
        printf("请输入想要执行功能的序号:");
        scanf("%c",&n);
        if(n<='0'||n>'3')
        {
            printf("输入的序号错误,请重新输入:\n");
            goto loop;
        }
        switch(n)
        {
            case 49:jiami(fp,fp1);break;
            case 50:jiemi(fp,fp1);break;
            case 51:goto sloop;
        }
    }
sloop:   
    if(fclose(fp)==0&&fclose(fp1)==0)
    {
        printf("文件关闭成功!\n");
    }
    else
    {
        printf("文件关闭失败!\n");
    }
    return 0;
}


void jiami(FILE *fp,FILE *fp1)
{
    int i,j=0;
    char a[30],sum;
    char num[6];
    printf("请输入原文件:");
    scanf("%s",a);
    fprintf(fp,"%s",a);
    rewind(fp);
    printf("请输入密钥:");
    scanf("%s",num);
   
    for(i=0;;i++)
    {
        sum=a[i]^num[j];
        j++;
        fputc(sum,fp1);
        if(j==5)
        j=0;
        if(a[i]=='\0'&&j==0)
        break;
    }
    rewind(fp1);
    printf("已加密!\n");
}

void jiemi(FILE *fp,FILE *fp1)
{
    int i=0,j=0;
    char a;
    char num[6];
    printf("请输入密钥:");
    scanf("%s",num);
    while(1)
    {
        a=fgetc(fp1)^num[i];
        i++;
        if(i==5)
        i=0;
        printf("%c",a);
        if(feof(fp1)!=0)
        {
            break;
        }
        
    }
    printf("\n");
}
2018-07-12 23:25
zbjzbj
Rank: 9Rank: 9Rank: 9
来 自:郑州
等 级:贵宾
威 望:12
帖 子:266
专家分:1318
注 册:2011-4-22
  得分:10 
if(i==5)
        i=0;?
i>5 i=0
2018-07-13 00:25
十里画码
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2018-7-9
  得分:0 
回复 2楼 zbjzbj
改了之后,原来的字符串全部都输出,但输出字符串后面还出现一堆乱码
2018-07-13 08:27
十里画码
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2018-7-9
  得分:0 
回复 2楼 zbjzbj
这个乱码怎么解决
2018-07-13 08:56
no1xijin
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江西
等 级:版主
威 望:7
帖 子:117
专家分:721
注 册:2015-7-8
  得分:10 
为什么要用文件模式输入和传参呢?
2018-07-13 09:03
十里画码
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2018-7-9
  得分:0 
回复 5楼 no1xijin
这是作业要求,我也没办法
2018-07-13 09:07
no1xijin
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江西
等 级:版主
威 望:7
帖 子:117
专家分:721
注 册:2015-7-8
  得分:0 
回复 6楼 十里画码
那没办法了,你这代码我运行不了
2018-07-13 09:34
十里画码
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2018-7-9
  得分:0 
回复 7楼 no1xijin
忘记说了,这程序我是在虚拟机下的linux系统下编写的
2018-07-13 09:54
十里画码
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2018-7-9
  得分:0 
回复 7楼 no1xijin
忘记说了,这程序我是在虚拟机下的linux系统下编写的
2018-07-13 09:54
no1xijin
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江西
等 级:版主
威 望:7
帖 子:117
专家分:721
注 册:2015-7-8
  得分:0 
回复 9楼 十里画码
哦哦,我目前条件不够
2018-07-13 10:18







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017565 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved