算法一 : 凯撒加密  (只能对英文的txt)   将每个字符的ASCII码相对于设置的偏移量偏移

#include <iostream>
#include <fstream>
using namespace std;int main()
{ifstream iFile("D:\\测试1.txt");   //建立输入文件流对象iFile.seekg(0, ios::end);        int nFileLen = iFile.tellg();iFile.seekg(0, ios::beg);char *str = new char[nFileLen + 1];iFile.read(str, nFileLen);iFile.close();str[nFileLen] = 0;int nCaesar = 5;   //设置偏移量int n = 0;         //记录回车数目for (int i = 0; i < nFileLen; i++){if ((str[i] >= 'a') && (str[i] <= 'z')){str[i] += nCaesar;if (str[i] > 'z')str[i] -= 26;}else if ((str[i] >= 'A') && (str[i] <= 'Z')){str[i] += nCaesar;if (str[i] > 'Z')str[i] -= 26;}else if (str[i] == '\n')n++;}ofstream oFile("D:\\测试2.txt");oFile.write(str, nFileLen - n);oFile.close();delete[] str;str = nullptr;return 0;
}

语文学的不好,算法原理就百度copy一下。

在密码学中,恺撒密码是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。 恺撒密码通常被作为其他更复杂的加密方法中的一个步骤。恺撒密码还在现代的ROT13系统中被应用。但是和所有的利用字母表进行替换的加密技术一样,恺撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。

重点解释一下代码中的

<span style="white-space:pre">  </span>str[i] += nCaesar;if (str[i] > 'z')str[i] -= 26;

如果加密字符的ASCII码值加上偏移量的值大于z的话,只需要将该值减去26。

为什么要减去26?

可以这么理解,如果我们要加密字符x,偏移量为3,x的ASCII码值等于120,加密后为123对应的是符号{ ,加密后的字符不是字母,不便于使用。

因此我们将其减去26等于97,对应字符a,我们把a到z看作一个周期的话,x向后偏移3最终得到的就是字符a。

 else if (str[i] == '\n')n++; 
         oFile.write(str, nFileLen);

此处的n为回车的数目,记录回车的数目,最后写入文件要减去回车的数目。

我们先把它在代码中注释掉,也就是不减去回车数目n。

测试1为源文件,测试2为加密后的文件。

源文件中只有ab回车c,回车对应的两个字符 \n\r,那么源文件中内存排布就是 ab\n\rc 五个字符,当编译器读入源文件时会自动忽略掉\r,也就变成了 ab\nc 四个字符,nFIleLen = 5,在写入文件的时候实际上只有4个字符。所以写入的时候如果不把回车数减掉,那么就会出现这样的错误。写入fg\nh? 五个字符。

oFile.write(str, nFileLen - n);

如果将回车数减掉的话,结果会变成这样。

结果正确。

文件加密(一) 凯撒加密(Caesar cipher)相关推荐

  1. 字符加密(凯撒加密)

    在密码学中,恺撒密码是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文.例如,当偏移量是3的时候,所有的字母A ...

  2. 凯撒加密Caesar cipher与古典密码

    凯撒加密的由来 凯撒加密正是凯撒大帝发明的,是一种古典的加密 凯撒率军征服高卢,袭击日耳曼和不列颠,古罗马开启了走出意大利,征服全欧洲的征程 仅用8年时间征服高卢后,凯撒率军越过卢比孔河,驱赶政敌,成 ...

  3. 什么是替换加密(凯撒密码)?原理是什么?

    首先了解一下什么是凯撒密码(Caesar Cipher) 凯撒密码 (英語:Caesar cipher), 或称凯撒加密.凯撒变换.变换加密,是一种最简单且最广为人知的加密技术. 凯撒密码是一种替换加 ...

  4. 凯撒加密的python语言程序_Python的凯撒密码加密为啥要ord(a),然后又减去?...

    当p为字母z时,试一下直接ord(p)+3就知道啦. 我假设老哥你已经懂了python语法,我就只讲讲凯撒加密.凯撒加密说白了就是偏移字母的位置,将原来的字母用它之后的第x个字母来代替原来的字母进行加 ...

  5. 凯撒加密caesar

    凯撒加密(Caesar cipher)是一种简单的消息编码方式:它根据字母表将消息中的每个字母移动常量位k.举个例子如果k等于3,则在编码后的消息中,每个字母都会向前移动3位:a会被替换为d:b会被替 ...

  6. 凯撒(Caesar)加密解密算法C/C++实现

    任成风 2018年5月20日星期日 博客首发地址:个人博客网站 http://fairycity.wang,内容以个人博客为主,修正后的博文见个人博客,请点击访问. 本文的框架: 摘要和关键字: 1. ...

  7. C语言凯撒密码字母向后偏移三位,凯撒加密解密(java字母移位)

    1.设计思想:加密就是将字符数据转化为ASC码表中的数字,a-w之间通过加3之后再转化为字符型输出,x-z之间通过转化为ASC码表中的数字后减去23再转化为字符型输出.解密就是将字符数据转化为ASC码 ...

  8. python凯撒加密代码_解密题(凯撒密码)

    在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一 ...

  9. 凯撒加密方法介绍及实例说明

    摘要 在密码学中,凯撒密码(英语:Caesar cipher),或称凯撒加密.凯撒变换.变换加密,是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前) ...

最新文章

  1. 使用ELK 搭建core文件展示平台
  2. 【JVM调优工具篇】使用MAT工具分析dump文件(查看GC Roots)
  3. 保利协鑫多晶硅产量再创历史记录
  4. 机器学习实战-回归算法-18
  5. 在Java中获取素数的无限列表
  6. ThinkPHP整合百度Ueditor图文教程
  7. Nature | IL-27直接靶向脂肪细胞以促进产热而改善肥胖
  8. idea运行android usb调试,android-Intellij Idea不允许在真实设备上运行应...
  9. 程序员创业的两难困境
  10. 带新手玩转MVC——不讲道理就是干(上)
  11. 【安装包】Dev-cpp
  12. Java 实现树结构计算各个节点数的和
  13. VNC实现Windows远程访问Ubuntu 16.04(无需安装第三方桌面,直接使用自带远程工具)...
  14. 分布式存储Ceph之PG状态详解
  15. python lime_本地可解释模型不可知的解释– LIME in Python
  16. 分数相同的排名处理php,SQL实现相同分数排名相同--sql 语句 并列排名的问题
  17. 【sql: 每天进步一点点】sql 中的 LIKE 用法
  18. 大话设计模式18----备忘录模式
  19. plt_iris Matplotlib画图参数 Numpy 莺尾花演示
  20. JavaScript 正则表达式匹配汉字

热门文章

  1. HALCON 20.11:深度学习笔记(1)
  2. 如何恢复excel文档原来的内容
  3. PADS layout pdf打印输出
  4. keras里predict函数预测速度慢的优化方法
  5. 跟踪员工考勤时间和出勤率的四种方法
  6. 华清远见专家解读Android开发者的前景
  7. IT圈故事杂谈(5)敏捷一词的由来
  8. jsp和js之间的数据流动
  9. 开展全媒体营销的具体步骤和策略
  10. 用户画像基础之用户画像是什么