读书人

新手小白学生求指点 感激不尽

发布时间: 2012-08-10 12:19:33 作者: rapoo

新手小白学生求大虾指点 感激不尽!
我是一名计算机专业的学生 最近在学C 在论坛资源上下载了 一个文件加解密系统 可是看不太懂 有些函数调用根本都不明白 ,希望哪位大侠加点注释 解释一下下 感激不尽!
以下是程序源代码:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

//生成一个随即序列
void CreatArrange(int p[]){
int i,j,k,tem;

for(i=0;i<8;i++){
p[i] = i;
}
//生成随即序列
for(i=7;i>0;i--){
k=rand()%(i+1);
for(j=k;j<=i;j++){
tem = p[j];
p[j] = p[j+1];
p[j+1] = tem;
}
}
}

//加密函数

void EnCode(char InFile[],char OutFile[],int pwd){
FILE *pInFile,*pOutFile;
unsigned int c=0,ch=0;
int p[8],a[8],i=0,j=0;
srand(pwd);

if((pInFile = fopen(InFile,"rb")) == NULL){
printf("打开输入文件%s失败!\n",InFile);
exit(1);
}

if((pOutFile = fopen(OutFile,"wb")) == NULL){
printf("打开输入文件%s失败!\n",OutFile);
exit(1);
}

ch=fgetc(pInFile);

while(!feof(pInFile)){
CreatArrange(p);
c=rand()%256;
ch=ch^c;

for(i=7;i>=0;i--){
//查找i在排序中的位置
for(j=0;j<8;j++){
if(p[j] == i)break;
}

a[j] = ch%2;
ch=ch>>1;
}

ch=0;
for(i=0;i<8;i++){
ch=ch*2+a[i];
}

fputc(ch,pOutFile);
ch=fgetc(pInFile);
}

fclose(pInFile);
fclose(pOutFile);
}


//解密函数
void UnCode(char InFile[],char OutFile[],int pwd){
FILE *pInFile,*pOutFile;
unsigned int c,ch;
int p[8],a[8],i,j;
srand(pwd);

if((pInFile = fopen(InFile,"rb")) == NULL){
printf("打开输入文件%s失败!\n",InFile);
exit(1);
}

if((pInFile = fopen(InFile,"wb")) == NULL){
printf("打开输入文件%s失败!\n",OutFile);
exit(1);
}

ch=fgetc(pInFile);

while(!feof(pInFile)){
CreatArrange(p);
for(i=7;i>=0;i--){
j=p[i];
a[j] = ch % 2;
ch=ch>>1;
}

ch=0;
for(i=0;i<8;i++){
ch=ch*2+a[i];
}

c=rand()%256;
ch=ch^c;

fputc(ch,pOutFile);
ch = fgetc(pInFile);
}

fclose(pInFile);
fclose(pOutFile);
}

int main(void){
char InFileName[255],OutFileName[255];
int pwd=0,select=1;

while(select != 3){
printf(
"请选择\n"
"1. 加密文件。\n"
"2. 解密文件。\n"
"3. 退出程序。\n"
);

scanf("%d",&select);
assert(select>=1&&select<=3);

switch(select){
case 1:
printf("请输入加密文件名:");
scanf("%s",InFileName);

printf("请输入输出文件名:");
scanf("%s",OutFileName);

printf("请输入口令:");
scanf("%d",&pwd);

EnCode(InFileName,OutFileName,pwd);
break;
case 2:
printf("请输入解密文件名:");
scanf("%s",InFileName);

printf("请输入输出文件名:");
scanf("%s",OutFileName);

printf("请输入口令:");
scanf("%d",&pwd);

UnCode(InFileName,OutFileName,pwd);
break;
}
}
system("PAUSE");
return 0;
}



源代码给的注释已经能帮我弄懂编写者想干什么 可是原理还是不太明白 希望大虾能够加点注释 解救一下我可怜的脑细胞

[解决办法]
先前琢磨了下,觉得这程序好像有问题。然后调试了下,果然是有问题的。楼主还是不要纠结了。恭喜楼主,不需要浪费脑细胞了。
单步调试下就知道是有问题的了。产生随机数的时候你是不是忘记把p数组给清零了???导致了随机数数组里可能有垃圾数据哦。
[解决办法]
忠告:不要轻易相信网上得到的代码木有问题,而去花时间研究它。

读书人网 >C++

热点推荐