大学编程,加解密处理,求帮助!!!

1,问题描述:编写一个对字符文件(由数字或字母组成)进行加密解密的程序。可以将所需要的内容(整个文件或者输入的一行字符)加密,也可以将存储的加密文件翻译回来。例如加密时可... 1,问题描述:编写一个对字符文件(由数字或字母组成)进行加密解密的程序。可以将所需要的内容(整个文件或者输入的一行字符)加密,也可以将存储的加密文件翻译回来。例如加密时可以将选取内容的每个字符依次反复加上“4963287312”中的数字,如果范围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(既N%122)。解密与加密的顺序相反。

2,功能要求

(1) 从键盘输入要进行加密的一行字符串或者需要加密的文件名。

(2) 显示菜单:

*********************************

1.设置加密方法
2.加密
3.解密
4.退出

*********************************
(3)按照菜单,进行相应的操作。加密方法是设置一加密字符串以及对文件的哪些部分进行加密;加密是将原始文件加密并保存到文件中;解密是将加了密的文件还原并保存到文件中,同时应比较与原始文件的一致性;显示是将文件在屏幕上显示出来,供人工校对。

3,数据结构
(1)加密方法用结构表示
struct password /*加密方法*/
{
char ps[10]; /*加密字符串*/
long wd; /*加密的字节数*/
};
(2)定义原始文件sourse.txt,加密文件result.txt和还原文件recall.txt

4,主要程序模块及函数名称:
(1)在屏幕上显示文件 void printtxt();
(2)加密 void encode()
(3)解密 void decode()

5算法提示
1) 加密时,每个字符依次反复加上”4963287312”中的数字,如果范围超过ASCII码值的032(空格)—122(‘z’),则进行模运算(即N%122).
例如:加密the (t)116+4,(h)104+9,(e)101+6 变为xqk
2) 解密:解密过程与加密过程的顺序正好相反,即从第一个字符开始,每个字符依次反复减去”4963287312”中的数字,若执行减法后得到一个负数,则把这个负数加122,即 (N+122), 其中N为负数。
例如:把xqk解密 (x) 120-4 (q)111-9 (k) 107-6 变为 the

4)其他要求
1) 变量、函数命名符合规范。
2) 注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。
3) 程序的层次清晰,可读性强。
展开
 我来答
terranlong
2011-11-23 · TA获得超过7293个赞
知道大有可为答主
回答量:2660
采纳率:0%
帮助的人:3947万
展开全部
花我不少时间啊,你看看,已经测试
#include <stdio.h>
#include <string.h>
typedef struct password /*加密方法*/
{
char ps[10]; /*加密字符串*/
long wd; /*加密的字节数*/
}password;
void printtxt(); //在屏幕上显示文件
void encode(); //加密
void decode(); //解密
void setkey(); //设置密码
void main()
{
printf("*********************************\n");
printf("1.设置加密方法\n");
printf("2.加密\n");
printf("3.解密\n");
printf("4.退出\n");
printf("*********************************\n");
char choice;
while (1)
{
printf("请重新输入1~4:");
fflush(stdin);
scanf("%c", &choice);
switch(choice)
{
case '1':
setkey();
break;
case '2':
encode();
break;
case '3':
decode();
break;
case '4':
printf("谢谢使用!即将退出!\n");
return;
}
}
}
void setkey()
{
FILE* pfile;
char pathname[50];
password pw;
fflush(stdin);
printf("密钥完整路径:");
gets(pathname);
if ((pfile = fopen(pathname, "wb")) == NULL)
{
printf("打开文件错误!\n");
return;
}
printf("请输入密码:");
gets(pw.ps);
pw.wd = strlen(pw.ps);
fwrite(pw.ps, 1, pw.wd, pfile);
printf("密钥保存成功!\n");
fclose(pfile);
}
void encode()
{
FILE *pfile, *pkey, *pefile;
char keypathname[50];
char filepathname[50];
char efilepathname[50];
password key;
password file;
int i;
fflush(stdin);
printf("密钥完整路径:");
gets(keypathname);
if ((pkey = fopen(keypathname, "rb")) == NULL)
{
printf("打开密钥错误!\n");
return;
}
fflush(stdin);
printf("加密前文件完整路径:");
gets(efilepathname);
if ((pefile = fopen(efilepathname, "wb")) == NULL)
{
printf("打开密钥错误!\n");
return;
}
fflush(stdin);
printf("加密后文件完整路径:");
gets(filepathname);
if ((pfile = fopen(filepathname, "wb")) == NULL)
{
printf("打开文件错误!\n");
return;
}
key.wd = fread(key.ps, 1, 10, pkey);
fflush(stdin);
printf("请输入明文:");
gets(file.ps);
file.wd = strlen(file.ps);
fwrite(file.ps, 1, file.wd, pefile);
for (i = 0; i != file.wd; ++i)
{
file.ps[i] = (file.ps[i] + key.ps[i] - 48) % 122;
}
fwrite(file.ps, 1, file.wd, pfile);
printf("加密成功!\n");
fclose(pfile);
fclose(pkey);
fclose(pefile);
}
void decode()
{
FILE *pfile, *pkey, *pdfile;
char keypathname[50];
char filepathname[50];
char dfilepathname[50];
password key;
password file;
int i;
fflush(stdin);
printf("密钥完整路径:");
gets(keypathname);
if ((pkey = fopen(keypathname, "rb")) == NULL)
{
printf("打开密钥错误!\n");
return;
}
fflush(stdin);
printf("文件完整路径:");
gets(filepathname);
if ((pfile = fopen(filepathname, "rb")) == NULL)
{
printf("打开文件错误!\n");
return;
}
fflush(stdin);
printf("解密后完整路径:");
gets(dfilepathname);
if ((pdfile = fopen(dfilepathname, "wb")) == NULL)
{
printf("打开文件错误!\n");
return;
}
key.wd = fread(key.ps, 1, 10, pkey);
file.wd = fread(file.ps, 1, 10, pfile);
for (i = 0; i != file.wd; ++i)
{
file.ps[i] = (file.ps[i] - key.ps[i] + 48 + 122) % 122;
}
fwrite(file.ps, 1, file.wd, pdfile);
printf("解密成功!\n");
printtxt();
file.ps[file.wd] = '\0';
printf("解密后的明文:%s\n", file.ps);
fclose(pfile);
fclose(pkey);
fclose(pdfile);
}
void printtxt()
{
FILE* pfile;
char filepathname[50];
password file;
int i;
fflush(stdin);
printf("原文件完整路径:");
gets(filepathname);
if ((pfile = fopen(filepathname, "rb")) == NULL)
{
printf("打开原文件错误!\n");
return;
}
file.wd = fread(file.ps, 1, 10, pfile);
file.ps[file.wd] = '\0';
printf("原文件的明文:%s\n", file.ps);
fclose(pfile);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式