// file XOR test 2
#include <iostream>
#include <string>
#include <fstream>
#include <boost/filesystem.hpp>
void XOR(const std::string& filePath, const std::string& outputPath, const std::string& key)
{
std::ifstream fin(filePath, std::ios::binary);
std::istreambuf_iterator<char> beg(fin), end;
std::ofstream fout(outputPath, std::ios::binary);
std::ostreambuf_iterator<char> out(fout);
std::string::const_iterator keyChr = key.begin();
while(beg != end)
{
*out++ = *beg++ ^ *keyChr;
if(++keyChr == key.end())
keyChr = key.begin();
}
}
int main()
{
XOR("test.bin", "test.out", std::string(32, '*'));
std::cout << "File size: " << boost::filesystem::file_size("test.bin") << '\n';
}
Ly8gZmlsZSBYT1IgdGVzdCAyIAojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxmc3RyZWFtPgojaW5jbHVkZSA8Ym9vc3QvZmlsZXN5c3RlbS5ocHA+CnZvaWQgWE9SKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlUGF0aCwgY29uc3Qgc3RkOjpzdHJpbmcmIG91dHB1dFBhdGgsIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpCnsKICAgIHN0ZDo6aWZzdHJlYW0gZmluKGZpbGVQYXRoLCBzdGQ6Omlvczo6YmluYXJ5KTsKICAgIHN0ZDo6aXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBiZWcoZmluKSwgZW5kOwoKICAgIHN0ZDo6b2ZzdHJlYW0gZm91dChvdXRwdXRQYXRoLCBzdGQ6Omlvczo6YmluYXJ5KTsKICAgIHN0ZDo6b3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBvdXQoZm91dCk7CgogICAgc3RkOjpzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGtleUNociA9IGtleS5iZWdpbigpOwoKICAgIHdoaWxlKGJlZyAhPSBlbmQpCiAgICB7CiAgICAgICAgKm91dCsrID0gKmJlZysrIF4gKmtleUNocjsKCiAgICAgICAgaWYoKytrZXlDaHIgPT0ga2V5LmVuZCgpKQogICAgICAgICAgICBrZXlDaHIgPSBrZXkuYmVnaW4oKTsKICAgIH0KfQppbnQgbWFpbigpCnsKICAgIFhPUigidGVzdC5iaW4iLCAidGVzdC5vdXQiLCBzdGQ6OnN0cmluZygzMiwgJyonKSk7CiAgICBzdGQ6OmNvdXQgPDwgIkZpbGUgc2l6ZTogIiA8PCBib29zdDo6ZmlsZXN5c3RlbTo6ZmlsZV9zaXplKCJ0ZXN0LmJpbiIpIDw8ICdcbic7Cn0K