【发布时间】:2014-12-16 03:45:50
【问题描述】:
我正在解密使用我的加密程序制作的加密文件。我将尝试解释整个场景,以便每个人都能了解我的程序到底在做什么。
我的加密程序让用户输入一个字符串,然后将字符向右移动一个 8 到 15 之间的随机数。然后它将加密文件发送到名为 secret.dat 的目的地
它在加密文件中读取的是
10rovvys1237123&5#10
它首先告诉您字符被移动的数字为 (10),然后是加密字符串 (hello 123 123),空格使用空格之前的字符并将该字符替换为 4('y ' 和 '7'),而 '&' 字符显示加密终止的时间。在 '&' 字符之后有由 '#' 字符分隔的数字,表示空格的位置。
因此,首先使用解密程序,我使用 ifstream 打开文件并读取一个整数,以用作我向左移动来加密它,然后我遇到了问题。我不知道如何将字符读入字符串直到 '&' 字符,以便我可以将这些字符恢复正常。我找到了一种获取它们的方法,但我不知道如何将它们放入字符串中。
这就是我所做的,我能够将字符抓取到“&”字符:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
//Declare Variables
int shift;
char character;
char endOfFile = '&';
ifstream inData;
//Open file
inData.open("secret.dat");
//Begin program
inData >> shift;
cout << shift << endl;
inData.get(character);
while(character != endOfFile)
{
if (character >= 'a' && character <= 'z')
{
character = ((character - 'a' - shift) % 26) + 'a';
}
if (character >= '0' && character <= '9')
{
character = ((character - '0' - shift) & 10) + '0';
}
cout << character;
inData.get(character);
}
return 0;
}
我的第二个问题是我用来将字符移回的公式,因为它似乎无法正常工作,因为我认为我需要做的就是更改我的加密公式,它只是将移位添加到减去移位。但这是一个不同的问题,主要问题是抓取字符并将它们放入字符串中,以便我以后可以使用它们。现在循环只是抓取每个字符并将其输出,但除了循环外的第一个字符之外,我无法访问其他字符。
任何帮助将不胜感激,因为我似乎无法在其他任何地方找到我的解决方案。
【问题讨论】:
-
您可能想了解
std::getline,它允许您停止阅读任何指定的字符,而不仅仅是换行符(顾名思义)。 -
而
std::string允许追加,因此您可以在循环中追加字符。或者如果使用std::getline函数,则在输入后遍历字符串并进行转换。 -
最后,您应该考虑一下如果输入文件的格式不正确,或者从它读取错误会发生什么。现在你将进入一个无限循环。
-
是的,如果文件无法读取,我会添加,但我会放在最后。
标签: c++ encryption