加密char *的问题

时间:2017-02-12 17:42:38

标签: c++ vector cryptography xor


我已经在这个项目上工作了一个星期,我无法找到解决问题的方法。 我正在制作一个可以加密/解密二进制文件的加密器(如.exe,.jpg等) 我能够使用向量正确地从二进制文件中获取数据 但我无法正确加密/解密来自矢量的数据 一些代码:

jettyRunWar.httpPort=9999

和函数getKeyFromString:

    if (encryptFile)
        {
            Crypt crypt;
            //TOencryptfile.open(writeFile, ios::binary | ios::out);

            vector<char> buffer((istreambuf_iterator<char>(encryptFile)),(istreambuf_iterator<char>()));
            cout << buffer.size() << endl;
            _getch();
            for (std::vector<char>::iterator i = buffer.begin(); i != buffer.end(); ++i) {
                // encryption that fails
                temp = crypt.getKeyFromString(&*i , key, strlen(&*i));
            }
            TOencryptfile.close();
            encryptFile.close();
        }

最后是类型:

    KEYCRYPT Crypt::getKeyFromString(KEYCRYPT text, KEYCHAR charkey, keylength length) {
    int string_size = std::strlen(text);
    KEYCRYPT textcrypt = new char[string_size + 1];
    std::strcpy(textcrypt, text);
    int key = strlen(charkey);
    for (int i = 0; i < length; i++) {
        if (strlen(text) != 0) {
            textcrypt[i] = text[i] ^ charkey[i % (sizeof(charkey) / sizeof(char))];
            //keylvl += text[i] ^ (int(charkey) + i) % key;
            //keyfnl += keylvl[i] ^ (int(charkey) - i) * key;
        }
    }
    return textcrypt;
}

有人知道加密typedef char* KEYCRYPT; typedef int KEY; typedef char* KEYCHAR; typedef int keylength; 的好方法吗?
因为我的方式不起作用,所以当使用*i

再次调用该函数时,它不会返回相同的内容

1 个答案:

答案 0 :(得分:0)

好吧,根据@Barmar的反应:
@waterlight Put the file contents into a string and pass that to the crypto API.
我设法解决了这个问题。
我所要做的就是:

stringstream result;
std::copy(buffer.begin(), buffer.end(), std::ostream_iterator<char>(result, " "));
string now = result.str();

一切正常 感谢所有回复的人!!