-1

我正在尝试将部分加密的字符串保存到文件中。我已经被困了几个小时了,我不明白错误在哪里。这是功能:

void cryptData(string & rawTxt, string & path) {

    // the rawTxt is OK. Path is too.

    int c(0), counta(0);
    while( rawTxt[c] != '\0') { // Reading every char from the string.

        if(c <= 122) {
            // First 123 char won't be crypted. 
            // Here I do nothing to rawTxt
        }
        else { // All remaining chars will be crypted

            rawTxt[c] = cryptByte(counta, rawTxt[c]); // Replace current char at position c
                                                      // by a crypted char.
            counta++;

            if(counta > 36) // counta used for crypting,
                counta = 0;
        }
        c++;
    } 

    ofstream toDat(path.c_str() ); // Save recrypted .dat file
    toDat << rawTxt.c_str();  // HERE the first 123 chars are not copied in my file... 
}


// Crypt chars
char cryptByte(int counta, char b) {
    string plainEncryptionKey("odBearBecauseHeIsVeryGoodSiuHungIsAGo");
    b+= (char) plainEncryptionKey[counta];
    return b;
}

我不明白为什么前 123 个字符没有保存在我的文件中。rawTxt 字符串从我的程序开始到结束的长度相同。请我快疯了!

编辑:对不起,我的字符串 rawTxt 是解密文件的结果,该文件的开头有 123 个随机字符。所以这些随机字符在解密算法中被清除了。我愚蠢地编写了加密算法,却没有将这 123 个字符放回应有的位置。当我意识到我的代码适用于另一个字符串时,我得到了提示。我的错。谢谢你的帮助!

4

3 回答 3

1

嗯....我只是在这条线上徘徊:

b+= (char) plainEncryptionKey[counta];

是不是 char b 从可读字符(即文本)变为不可读字符,或者类似于换行符或回车符之类的东西会覆盖行的开头?

如果你做'a'+'a'你不会得到'a'你得到......实际上我不确定你得到什么,但它超出了纯文本“频谱”。

也许您只想检查您的 cryptByte 是否生成可读字符....或以二进制方式查看您的文件?

于 2013-08-27T15:26:05.130 回答
0

我尝试编译它,但使用 -Wall 和 gcc 编译器出现此错误:

'std::ofstream toDat' 具有初始化程序但类型不完整`

通过包含fstream库,我设法使其工作。它希望它有所帮助。因为它实际上打印了字符,如果你在std::cout中输出它。

于 2013-08-27T15:34:38.700 回答
0

您可以使用以下方法进行很多简化C++11

void cryptData(string & rawTxt, string & path) {
    string plainEncryptionKey("odBearBecauseHeIsVeryGoodSiuHungIsAGo");
    int count = 0;
    for (char & c : rawTxt)
        if (c > 122) {
            c = plainEncryptionKey[count];
            count = (count + 1) % 37;
        }
    ofstream toDat(path.c_str());
    toDat << rawTxt;
}
于 2015-07-07T08:51:14.300 回答