我已经在这个项目上工作了一个星期,我无法找到解决问题的方法。
我正在制作一个可以加密/解密二进制文件的加密器(如.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
答案 0 :(得分:0)
@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();
一切正常 感谢所有回复的人!!