文件加密(一) 凯撒加密(Caesar cipher)

编程入门 行业动态 更新时间:2024-10-28 10:28:40

算法一 : 凯撒加密  (只能对英文的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)

本文发布于:2023-06-14 03:46:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1434723.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:凯撒   文件加密   cipher   Caesar

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!