| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1773 人关注过本帖
标题:谁帮我看看这段加密解密的代码哪里错了,解密的时候发现数据丢失!
只看楼主 加入收藏
libinden71
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2015-12-3
结帖率:63.64%
收藏
已结贴  问题点数:20 回复次数:11 
谁帮我看看这段加密解密的代码哪里错了,解密的时候发现数据丢失!
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <string.h>


int prin_size1()
{
    FILE  *p = fopen("F:\\cs.txt", "rb");
    int size = 0;
    int ch;
    if (p != NULL)
    {
        while ((ch = getc(p)) != EOF)
        {
            size++;
        }
    }
    fclose(p);
    return size;
}


void mainasd()//分段加密
{
    FILE  *pf = fopen("F:\\cs.txt", "rb");
    FILE *pfw = fopen("F:\\cs(加密).txt", "wb");
    char str[100] = { 0 };

    if (pf == NULL || pfw == NULL)
    {
        printf("文件打开失败\n");
    }
    else
    {
        int size = 0;
        int length = 0;
        printf("请输入加密的密码:");
        scanf("%s", str);
        length = strlen(str);
        size = prin_size1();
        printf("size=%d\n", size);

        if (size%length == 0)
        {
            for (int i = 0; i < size / length; i++)
            {
                for (int j = 0; j < length; j++)
                {
                    fputc(fgetc(pf) ^ str[j], pfw);
                }
            }
        }
        else
        {
            for (int i = 0; i < size / length - 1; i++)
            {
                for (int j = 0; j < length; j++)
                {
                    fputc(fgetc(pf) ^ str[j], pfw);
                }
            }

            for (int i = 0; i < size%length; i++)
            {
                fputc(fgetc(pf) ^ str[i], pfw);
            }
        }

    }


    fclose(pf);
    fclose(pfw);
    system("pause");
}

void main()//分段解密
{

    FILE  *pf = fopen("F:\\cs(加密).txt", "rb");
    FILE *pfw = fopen("F:\\cs(解密).txt", "wb");
    char str[100] = { 0 };

    if (pf == NULL || pfw == NULL)
    {
        printf("文件打开失败\n");
    }
    else
    {
        int size = 0;
        int length = 0;
        printf("请输入解密的密码:");
        scanf("%s", str);
        length = strlen(str);
        size = prin_size1();

        if (size%length == 0)
        {
            for (int i = 0; i < size / length; i++)
            {
                for (int j = 0; j < length; j++)
                {
                    fputc(fgetc(pf) ^ str[j], pfw);
                }
            }
        }
        else
        {
            for (int i = 0; i < size / length - 1; i++)
            {
                for (int j = 0; j < length; j++)
                {
                    fputc(fgetc(pf) ^ str[j], pfw);
                }
            }

            for (int i = 0; i < size%length; i++)
            {
                fputc(fgetc(pf) ^ str[i], pfw);
            }
        }
    }


    fclose(pf);
    fclose(pfw);
    system("pause");
}
搜索更多相关主题的帖子: include return 加密 
2016-10-08 15:50
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
参阅     https://bbs.bccn.net/thread-41519-1-1.html

请给出测试输入、输出、数据丢失,丢了什么?

不给或者给不了的话,请你自己调试运行,一步一步跟踪每一个变量的具体值。观差程序运行到哪个位置的时候出现了异常。。这代码是你写的,你应该比任何人都清楚每一步需要做什么。


φ(゜▽゜*)♪
2016-10-08 15:57
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
连文件名都不一样,一个是 "F:\\cs(加密).txt",一个是 "F:\\cs.txt"
2016-10-08 15:58
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
for (int i = 0; i < size / length - 1;
不知道为什么
2016-10-08 16:03
libinden71
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2015-12-3
收藏
得分:0 
回复 3楼 rjsp
上一个main  生成cs(加密) 下面main生成(解密) 肯定不一样啊!
2016-10-08 16:13
libinden71
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2015-12-3
收藏
得分:0 
回复 2楼 书生牛犊
解密后内容:
图片附件: 游客没有浏览图片的权限,请 登录注册

原始文件内容:
图片附件: 游客没有浏览图片的权限,请 登录注册

密码:libide
丢失了 最后一行  初步确定 可能是秘钥长度有关系 但是具体不清楚  调试好多遍  代码逻辑应该没错才对

[此贴子已经被作者于2016-10-8 16:22编辑过]

2016-10-08 16:20
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

bool foo( const char* plain, const char* key, const char* cipher )
{
    if( !*key )
        return false;

    FILE* fa = fopen( plain, "rb" );
    if( !fa )
        return false;
    FILE* fb = fopen( cipher, "wb" );
    if( !fb )
    {
        fclose( fa );
        return false;
    }

    const size_t keylen = strlen( key );

    bool ret = true;
    int c;
    for( size_t i=0; (c=fgetc(fa))!=EOF && fputc(c^key[i],fb)!=EOF; i=(i+1)%keylen );
    if( ferror(fa) || ferror(fb) )
        ret = false;

    fclose( fb );
    fclose( fa );
    return ret;
}

int main( void )
{
    foo( "原始文件.txt", "keyword", "加密文件.bin" );
    foo( "加密文件.bin", "keyword", "解密文件.txt" );
    // 解密文件.txt 和 原始文件.txt 应当相同

    return 0;
}
2016-10-08 16:25
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
我自己随便输了几个字母试了试,是好的,不知你用的源文件能否发一下。
2016-10-08 16:27
libinden71
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2015-12-3
收藏
得分:0 
cs.rar (428 Bytes)
2016-10-08 16:29
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:20 
加密解密部分的减一去掉试试
for (int i = 0; i < size / length; i++)
2016-10-08 16:33
快速回复:谁帮我看看这段加密解密的代码哪里错了,解密的时候发现数据丢失!
数据加载中...
 
   



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

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