【问题描述】有一种加密方法为:其使用一个字母串(可以含重复字母,字母个数不超过50)作为密钥。假定密钥单词串为feather,则先去掉密钥单词中的重复字母得到单词串feathr,然后再将字母表中的其它字母以反序追加到feathr的后面:

 f  e  a  t  h  r  z  y  x  w  v  u  s  q  p  o  n  m  l  k  j  i  g  d  c  b 

加密字母的对应关系如下:

 a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z
 f  e  a  t  h  r  z  y  x  w  v  u  s  q  p  o  n  m  l  k  j  i  g  d  c  b

其中第一行为原始英文字母,第二行为对应加密字母。其它字符不进行加密。编写一个程序,用这种密码加密文件。假定要加密的文件名为encrypt.txt及加密后的文件名为output.txt,并假定输入文件中字母全为小写字母,并且输入密钥也全为小写字母。

【输入形式】从标准输入中输入密钥串,并从文件encrypt.txt中读入要加密的内容。
【输出形式】加密后结果输出到文件output.txt中。
【样例输入】
feather
和文件encrypt.txt中内容,例如被加密的文件encrypt.txt中内容为:
c language is wonderful.
【样例输出】加密后output.txt文件中内容为:
a ufqzjfzh xl gpqthmrju.
【样例说明】首先将给定的密钥单词去除重复字母,然后按照上面的加密对应表对encrypt.txt文件内容进行加密即可得到加密后的文件,其中只对英文字母进行加密对换,并且假设encrypt.txt中的英文字母全是小写字母。

【评分标准】该题要求对文件进行加密,共有5个测试点。提交程序名为encrypt.c

解题思路:这道题思路较为简单,首先将密匙读入,然后处理密匙,得到我们的密码本,然后一个一个的读入文本中的字符,然后将文本中的字符按照我们的密码本进行替换,然后将替换后的字符输出。(题目中标红的部分表示文本中全为小写字母,大大简化了我们的操作,也可以尝试没有这句话,程序会是什么样子)。

参考代码:

#include <stdio.h>
char ch[51],str[100000],ab[]="abcdefghijklmnopqrstuvwxyz";
int main()
{FILE *fp,*pp;fp=fopen("encrypt.txt","r");pp=fopen("output.txt","w");//打开需要的文件int i=0,j=0,k=0,lench=0,flag=0,n=0,lenstr=0;char hold,p;scanf("%s",ch);//读取密匙p=fgetc(fp);lench=strlen(ch);//获得密匙长度for(i=0;i<lench;i++)//从前向后遍历密匙{for(j=i+1;j<lench;j++)//寻找该字符后面是否有重复的{if(ch[i]==ch[j])//如果有{for(k=j;k<lench;k++)ch[k]=ch[k+1];//将重复字符后面的字符都向前移一位lench--;//密匙删掉一个字符,长度减一j--;//此时ch【j】已经是新的字符,因为for循环里j++,这里的j要减一}}}//将密匙中的重复字符删去lench=strlen(ch);//更新处理后的密匙长度for(i=0,j=25;i<j;i++,j--){hold=ab[j];ab[j]=ab[i];ab[i]=hold;}//将ab中的字符倒过来,其实这一步没必要,在下一个for循环中从后向前就行for(i=0,n=0;i<26;i++){flag=0;for(j=0;j<lench;j++){if(ab[i]==ch[j]){flag=1;break;}}//寻找ab中对应的字母是否已经在密匙中if(flag==0){ch[lench+n]=ab[i];n++;}//如果没有,则将其加入密匙中}lench=strlen(ch);//更新密匙长度,这里的长度应该等于26for(i=0,j=25;i<j;i++,j--){hold=ab[j];ab[j]=ab[i];ab[i]=hold;}//再将ab倒过来,所以上文中说没有必要while(p!=EOF){for(j=0;j<26;j++){if(p==ab[j]){p=ch[j];break;}}//将读取到的字符进行替换fputc(p,pp);//然后输出p=fgetc(fp);//再次读入下一个字符}fclose(fp);fclose(pp);//关闭文件
}

BUAA大一下数据结构题解(加密文件)相关推荐

  1. 文件夹加密超级大师会把文件上传到服务器吗,共享文件夹加密超级大师怎么加密文件夹?...

    共享文件夹加密超级大师是一款非常优秀的文件夹加密软件,它可以帮助我们加密一些重要的文件,从而达到防复制.防截屏.防删除.防另存为的效果,保证了文件的安全.那么,共享文件夹加密超级大师怎么加密文件夹呢? ...

  2. 7、大数据中常见的文件存储格式以及hadoop中支持的压缩算法

    Hadoop系列文章目录 1.hadoop3.1.4简单介绍及部署.简单验证 2.HDFS操作 - shell客户端 3.HDFS的使用(读写.上传.下载.遍历.查找文件.整个目录拷贝.只拷贝文件.列 ...

  3. 肝!用 Python 加密文件

    生活中,有时候我们需要对一些重要的文件进行加密,Python 提供了诸如 hashlib,base64 等便于使用的加密库. 但对于日常学习而言,我们可以借助异或操作,实现一个简单的文件加密程序,从而 ...

  4. linux加密文件_如何在Linux上使用Gocryptfs加密文件

    linux加密文件 Gocryptfs是安装在用户空间(FUSE)中的文件系统文件级加密程序. FUSE安装意味着将加密文件存储在使用FUSE接口安装的单个目录树中,就像USB密钥一样. 这样一来,任 ...

  5. 【绝对原创】最新研究成果,EFS加密文件真的可以解密!各位不要放弃哈~

    我是一名正在读计算机专业的博士,前一段时间花费了几个月研究EFS解密技术,终于成功了,现在总结一下,给各位一个启示~ 关于EFS加密: EFS(Encrypting File System,加密文件系 ...

  6. python AES对称加密文件、解密文件

    咱也不是学计算机的,咱也不是学网络安全的,咱更不是学密码学的,所以东拼西凑一堆代码,能用就行. 该加解密的秘钥是自己输入的密码加电脑固定序列号,包括网卡MAC地址.CPU序列号.硬盘序列号.主板序列号 ...

  7. Python 加密文件与解密文件

    话不多说直接上代码 代码版权归本人所有 转载请注明出处 加密文件 软件下载地址 提取码:97h2 # -*- coding: utf-8 -*- #AES-demo #采用AES对称加密算法 impo ...

  8. Socket_Tcp加密文件传输系统

    代码下载链接:Socket_Tcp 原文链接:https://blog.csdn.net/weixin_45746588/article/details/107683901 这是一个课程的作业,我是初 ...

  9. pdf加密文件怎么加密

    PDF文件可能相较于其他文件,安全性可能会比较高一点,但是,PDF文件还是可以打开,让人可以直接看到里面的内容,如果要保证PDF文件中的内容不被别人所查阅,好的方法便是给PDF文件加上密码,下面便了解 ...

最新文章

  1. 关于使用eclipse maven UpdateProject时报错,无法更新本地仓库的问题解决方案
  2. Android Loader机制
  3. Android SDK下载失败的解决方法
  4. .NET 事件模型教程(一)
  5. 从道的角度来论述大数据对企业价值
  6. 5 Jedis 操作
  7. 怒卸python3.4.1
  8. 【转】Castle中AdditionalInterfaces用法介绍
  9. Java FilePermission暗含()方法与示例
  10. codeforces 580D Kefa and Dishes
  11. 和最大子序列(dp)
  12. QLabel 图片大小设定
  13. java第七章jdbc课后简答题_jsp编程基础第七章习题
  14. 程序员如何巧妙学习算法技巧?
  15. 上拉加载下拉刷新控件WaterRefreshLoadMoreView
  16. 手动安装.app到模拟器simulator, iOS XCode 11
  17. Android 录制gif图
  18. 201871010114-李岩松《面向对象程序设计(java)》第二周学习总结
  19. C中printf()的常用输出
  20. Android - JNI环境搭建和简单案例入门

热门文章

  1. Windows配置Java环境变量(下载、安装、配置环境)
  2. vue埋点 记录在前端页面停留时间
  3. c++11日期和时间工具-(std::chrono::system_clock)
  4. Json Parser Online - Json 在线解析工具 1
  5. 测试用例excel转word(Office word篇)
  6. scanf与printf的用法
  7. 不能忘却的记忆——水源垃圾史
  8. 暑期实训21组第一周个人工作总结
  9. nyoj 7街区最短路径问题(暴力 || 哈曼顿距离)
  10. dovecot postfix mysql_postfix+mysql+dovecot