谁帮本人看看这段加密解密的代码哪里错了,解密的时候发现数据丢失

C语言 码拜 7年前 (2017-04-23) 917次浏览
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;
}
//int prin_size2()
//{
// FILE  *p = fopen(“F:\cs.txt”, “rb”);
// int size = -1;
// if (p != NULL)
// {
// while (!feof(p))
// {
// fgetc(p);
// size++;
// }
// }
// fclose(p);
// return size;
//}
void mains()//分段加密
{
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);
}
}
}
}
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”);
}
解决方案

10

你在主楼发的代码,只有解密时有吧,加密时没有

10

引用:

本人看了好多遍了 没发现哪里逻辑有错误啊!

不要光看,要多输出中间变量,一开始测试的文件可以小一点,例如只包含5个字符,密钥的长度为2,加密后用二进制查看器看一下对不对,假如对了就排除了加密的代码,再调试解密的


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明谁帮本人看看这段加密解密的代码哪里错了,解密的时候发现数据丢失
喜欢 (0)
[1034331897@qq.com]
分享 (0)