我正在研究一个 Shit Cipher 并解密一段特定的文本。好的,那么,程序是如何工作的:
- 从文本文件中获取字符
- 将每个字符在字母表中向下移动 9 位。
现在,我已经这样做了,但是,我知道字符不能总是移动 9 个位置,所以程序会查看字符在字母 char 数组中的位置,然后如果可以完成,它只需添加 9,然后如果做不到,就拿走 9 (找不同)。但是,它不起作用,我无法弄清楚我哪里出错了。
这是代码:
#include <iostream>
#include <fstream>
using namespace std;
string inputFile = "";
#define MAX_FILE_SIZE 10000
const char alphabet[26] = {'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'};
const char alphabetUpper[26] =
{'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'};
const int sizeAlpha = sizeof(alphabet)/sizeof(alphabet[0]);
void Data(char* theData)
{
ifstream txtFile(inputFile.c_str());
if(!txtFile.is_open())
{
cerr << "Cannot open text file";
}
txtFile.read(theData, 520);
}
int main(int argc, char *argv[]) {
char getData[MAX_FILE_SIZE];
Data(getData);
char decrypted[520];
int algorthm;
for(unsigned i=0; (i < 520); i++)
{
for(unsigned j=0; (j < 26); j++)
{
if(getData[i] == alphabet[j] || alphabetUpper[j])
{
algorthm = j + 9; // we move 9 places.
if(sizeAlpha < algorthm)
{
decrypted[i] = alphabet[algorthm];
}else if(algorthm > sizeAlpha || algorthm == sizeAlpha)
{
algorthm = sizeAlpha - j;
decrypted[i] = alphabet[algorthm];
}
}
}
}
for(unsigned i=0; (i < 520); i++)
{
cout << decrypted[i];
}
}
任何人都知道我要去哪里错了,或者,可以提供一个类似的解决方案?